鱼C论坛

 找回密码
 立即注册
查看: 4190|回复: 7

二叉树遍历出了点问题,求指点

 关闭 [复制链接]
发表于 2014-11-23 11:50:14 | 显示全部楼层 |阅读模式
10鱼币
创建二叉树用递归是没问题了,遍历递归错哪了?问题出在bianli(t)上
  1. #include<stdio.h>

  2. #include<stdlib.h>
  3. typedef struct tree
  4. {
  5. char a;
  6. struct tree *l,*r;                 //左右孩子
  7. }tree;

  8. tree *creat(tree *t) //设置根为t的二叉树
  9. {
  10. tree *p;
  11. char c;
  12. p=(tree *)malloc(sizeof(tree));
  13. t=p;
  14. scanf("%c",&c);
  15. if(' '==c)
  16. { p=NULL;

  17. }

  18. else
  19. {
  20. p->a=c;
  21. creat(p->l);
  22. creat(p->r);
  23. }
  24. return t;
  25. }

  26. void bianli(tree *t)
  27. {
  28. if(t==NULL)printf("_"); //用下标表示空
  29. else
  30. {
  31. printf("%c\n",t->a);
  32. bianli(t->l);
  33. bianli(t->r);
  34. }
  35. }


  36. void main()
  37. {
  38. tree *t;
  39. t=creat(t);
  40. bianli(t);


  41. }
复制代码


最佳答案

查看完整内容

应该使用指向指针的指针,而且creat函数里p = NULL 和 p=(tree *)malloc(sizeof(tree)); 有点问题,我改了下,使用 t = creat(&t); tree *creat(tree **t) //设置根为t的二叉树 { tree *p; char c; fflush(stdin); scanf("%c",&c); if(' '==c) { *t = NULL; } else { p = (tree *)malloc(sizeof(tree)); *t=p; p->a=c; printf("请输入 %c 结点的左子树结点: ", p->a); creat(&p->l); ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-23 11:50:15 | 显示全部楼层
应该使用指向指针的指针,而且creat函数里p = NULL 和 p=(tree *)malloc(sizeof(tree)); 有点问题,我改了下,使用 t = creat(&t);
tree *creat(tree **t) //设置根为t的二叉树
{
        tree *p;
        char c;

        fflush(stdin);
        scanf("%c",&c);
        if(' '==c)
        {
                *t = NULL;
        }
       
        else
        {
                p = (tree *)malloc(sizeof(tree));
                *t=p;
                p->a=c;
                printf("请输入 %c 结点的左子树结点: ", p->a);
                creat(&p->l);
                printf("请输入 %c 结点的右子树结点: ", p->a);
                creat(&p->r);
        }
        return *t;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-11-23 11:58:29 | 显示全部楼层
是因为没用二重指针吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-11-23 12:25:07 | 显示全部楼层
果然是没用二重指针的原因,测试了一下知道原来是创建二叉树时候出的岔子
  1. void main()

  2. {

  3. tree *t;

  4. t=creat(t);
  5. printf("%c\n",t->a);
  6. printf("%c\n",t->l);
  7. printf("%c\n",t->r);





  8. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-11-23 13:12:09 | 显示全部楼层
自己找到答案了,小甲鱼老师视频里一带而过,二重指针的用法,找到了篇帖子
http://blog.csdn.net/sdfgh2046/article/details/5647913
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-11-23 13:17:25 | 显示全部楼层
漠水 发表于 2014-11-23 13:12
自己找到答案了,小甲鱼老师视频里一带而过,二重指针的用法,找到了篇帖子
http://blog.csdn.net/sdfgh20 ...

如果看到这个帖子第一个回复,那我就直接给分了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-12-2 20:00:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-12-14 18:36:52 | 显示全部楼层
有qq吗,加我qq聊聊 85183299
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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