二叉树问题,写代码。

通过键盘输入的扩充二叉树的层次遍历序列, 建立二叉树(如:序列:2,5,6,0,0,10,11,0,0,0,0 )。(设二叉树结点的数据为int型,其中扩充结点用'0'号表示)。然后按中序和后序输出此二叉树,求该树的叶结点个数和度数为2的结点个数)。

你题目的解答代码如下:

#include "stdio.h"

#include "malloc.h"

typedef struct treenode

{
    int data;

    struct treenode *lchild, *rchild;

} TREENODE, *TREENODEPTR;

#define N 50

void creattree(TREENODEPTR *root)

{
    int value, r1, r2;

    TREENODEPTR t, q[N];

    scanf("%d", &value);

    if (value)

    {
        *root = (TREENODEPTR)malloc(sizeof(TREENODEPTR));

        (*root)->data = value;

        r2 = r1 = 1;

        q[r1] = *root;
    }

    else

    {
        printf("input error\n");
        return;
    }

    while (r2 <= r1)

    {
        t = q[r2];
        r2++;

        scanf("%d", &value);

        if (value == 0)

            t->lchild = NULL;

        else

        {
            t->lchild = (TREENODEPTR)malloc(sizeof(TREENODEPTR));

            t->lchild->data = value;

            r1++;
            q[r1] = t->lchild;
        }

        scanf("%d", &value);

        if (value == 0)

            t->rchild = NULL;

        else

        {
            t->rchild = (TREENODEPTR)malloc(sizeof(TREENODEPTR));

            t->rchild->data = value;

            r1++;
            q[r1] = t->rchild;
        }
    }
}

/*非递归中序遍历二叉树*/

void InOrder(TREENODEPTR root)

{

    TREENODEPTR q[N];

    int top = 0;

    TREENODEPTR p;

    p = root;

    do
    {

        while (p != NULL)

        {

            if (top > N)

                return;

            top = top + 1;

            q[top] = p;

            p = p->lchild;
        };

        if (top != 0)

        {

            p = q[top];

            top = top - 1;

            printf("%3d", p->data);

            p = p->rchild;
        }

    } while (p != NULL || top != 0);
}

/*非递归后序遍历二叉树*/

void PostOrder(TREENODEPTR root)
{

    TREENODEPTR p, r, q[N];

    int top = 0;

    r = NULL;

    p = root;

    while (p != NULL || top != 0)

    {

        while (p != NULL)

        {
            top++;

            if (top >= N)

                return;

            q[top] = p;
            p = p->lchild;
        }

        if (top > 0)

        {
            p = q[top];

            if ((p->rchild == NULL) || (p->rchild == r))
            {
                printf("%3d", p->data);

                r = p;

                top--;

                p = NULL;
            }

            else

                p = p->rchild;
        }
    }
}

main()

{
    TREENODEPTR root;

    root = NULL;

    printf("输入的扩充二叉树的层次遍历序列为:\n");

    creattree(&root);

    printf("非递归中序遍历二叉树:\n");

    InOrder(root);

    printf("\n");

    printf("非递归后序遍历二叉树:\n");

    PostOrder(root);

    printf("\n");
}


如有帮助,望采纳!谢谢!

参考

img