￰937 2022-05-03 20:38 采纳率: 50%
浏览 49
已结题

如何实现创建固定结点个数的二叉树?

如图所示,二叉树结点为7个,如果用递归或者基于栈的方式,创建函数应该怎么去编写呢?

img

  • 写回答

1条回答 默认 最新

  • fuill 2022-05-04 01:02
    关注

    img

    #include<stdio.h>
    #define max 7
    #define OK 1
    typedef struct SqBiTree
    {
        char node[max+1];
    }
    SqBiTree;
    //SqBiTree T;
    int CreatBitree(SqBiTree *T)
    {
        T->node[0]=-1;
        printf("输入二叉树:");
        for(int i=1; i<=max; i++)
        {
            scanf("%c",&T->node[i]);
        }
        //put(T);
        return OK;
    }
    void put(SqBiTree T)
    {
        for(int i=1; i<=max; i++)
            printf("%c ",T.node[i]);
        printf("\n");
    }
    int Nonleafnode(SqBiTree T)
    {
        int count=0;
        for(int i=1; i<=max; i++)
        {
            if(T.node[i]!='.')
            {
                if(i*2<=max||i*2+1<=max)
                {
                    count++;
                    //printf("%c\n",T.node[i]);
                }
            }
        }
        return count;
    }
    void Nonemptynodewithoutparents(SqBiTree T)
    {
        for(int i=1; i<=max; i++)
        {
            if(T.node[i]!='.'&&(T.node[i/2]=='.'&&T.node[(i-1)/2]=='.'))
            {
                printf("出现无双亲的非空节点%c\n",T.node[i]);
            }
        }
    }
    int main()
    {
        SqBiTree T;
        int oper=1;
        while(oper!=-1)
        {
            printf("1.建立二叉树\n");
            printf("2.打印无双亲的非空节点\n");
            printf("3.打印非叶子节点数目\n");
            scanf("%d",&oper);
            getchar();
            switch (oper)
            {
            case 1:
                CreatBitree(&T);
                break;
            case 2:
                Nonemptynodewithoutparents(T);
                break;
            case 3:
                printf("非叶子节点数目:%d\n",Nonleafnode(T));
                break;
            }
        }
        // CreatBitree(&T);
        //Nonemptynodewithoutparents(T);
        //put(T);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月4日
  • 已采纳回答 5月4日
  • 赞助了问题酬金20元 5月3日
  • 创建了问题 5月3日