鱼C论坛

 找回密码
 立即注册
查看: 2663|回复: 3

[已解决]二叉树 遍历问题

[复制链接]
发表于 2018-7-9 17:25:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[i];
                ptr->data = c[i-1];
                ptr->lchild = NULL;
                ptr->rchild = NULL;
        }
        
        for(i=1; i<n; i++)
        {
                ptr = &head[i];
                //printf("==== %c\n", ptr->data);
                if(2*i+1 < n)
                {
                        btree l = ptr->lchild = &head[2*i];
                        //printf("L  %c  \n", l->data); 
                        btree r = ptr->rchild = &head[2*i+1];
                        //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[8];
        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[1]);
        putchar('\n');

        pos(&head[1]);

        putchar('\n');

        return 0;
}


最佳答案
2018-7-10 16:50:04
我相信你不相信这个结果
调用错函数了 ^_^
1.png
2.png
void pos(btree root)
{
        if(root)
        {
                /*in(root->lchild);
                in(root->rchild);*/
                pos(root->lchild);
                pos(root->rchild);
                printf("[%c] ", root->data);
        }

}

后序 无法递归遍历

后序 无法递归遍历
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-10 16:50:04 | 显示全部楼层    本楼为最佳答案   
我相信你不相信这个结果
调用错函数了 ^_^
1.png
2.png
void pos(btree root)
{
        if(root)
        {
                /*in(root->lchild);
                in(root->rchild);*/
                pos(root->lchild);
                pos(root->rchild);
                printf("[%c] ", root->data);
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-10 16:56:00 | 显示全部楼层
可以看得出,你在写 pos 函数时是复制的 in 函数,然后忘记改了
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-11 19:26:30 | 显示全部楼层
人造人 发表于 2018-7-10 16:50
我相信你不相信这个结果
调用错函数了 ^_^

自己太粗心!!
谢谢! ^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 09:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表