Martine 发表于 2018-7-9 17:25:00

二叉树 遍历问题

#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;
typedef struct node
{
        ElemType data;
        struct node *lchild, *rchild;
}node, *btree;

void CreateBtree(btree *root)
{
        ElemType c;
        scanf("%c", &c);
        if(c == '#'){
                *root = NULL;
        }else{
                *root = (btree)malloc(sizeof(node));
                (*root)->data = c;

                CreateBtree(&(*root)->lchild);
                CreateBtree(&(*root)->rchild);
        }
}

void CreateBtree2(node head[], int n, ElemType c[])
{
        int i;
        btree ptr;
        for(i=1; i<n; i++)
        {
                ptr = &head;
                ptr->data = c;
                ptr->lchild = NULL;
                ptr->rchild = NULL;
        }
       
        for(i=1; i<n; i++)
        {
                ptr = &head;
                //printf("==== %c\n", ptr->data);
                if(2*i+1 < n)
                {
                        btree l = ptr->lchild = &head;
                        //printf("L%c\n", l->data);
                        btree r = ptr->rchild = &head;
                        //printf("R%c\n", r->data);
                }
        }
}



void in(btree root)
{
        if(root)
        {
                in(root->lchild);
                printf("[%c] ", root->data);
                in(root->rchild);
        }
}


void pos(btree root)
{
        if(root)
        {
                in(root->lchild);
                in(root->rchild);
                printf("[%c] ", root->data);
        }

}
int main(void)
{
        node head;
        btree ptr, newnode;
        int i;
        ElemType c[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'};
        CreateBtree2(head, 8, c);

        in(&head);
        putchar('\n');

        pos(&head);

        putchar('\n');

        return 0;
}


人造人 发表于 2018-7-10 16:50:04

我相信你不相信这个结果
调用错函数了 ^_^



void pos(btree root)
{
        if(root)
        {
                /*in(root->lchild);
                in(root->rchild);*/
                pos(root->lchild);
                pos(root->rchild);
                printf("[%c] ", root->data);
        }

}

人造人 发表于 2018-7-10 16:56:00

可以看得出,你在写 pos 函数时是复制的 in 函数,然后忘记改了
^_^

Martine 发表于 2018-7-11 19:26:30

人造人 发表于 2018-7-10 16:50
我相信你不相信这个结果
调用错函数了 ^_^

自己太粗心!!
谢谢! ^_^
页: [1]
查看完整版本: 二叉树 遍历问题