关于中序建立二叉树的问题

geekblizzarddc 2009-05-24 01:11:45
如何用递归方法中序建立二叉树啊?
大家看看,这样为什么不对啊?
#include<stdio.h>
#include<stdlib.h>

typedef char TElemType;

typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

int createbitree(BiTree &T)
{
TElemType elem;
scanf("%c",&elem);
if(elem==' ')T=NULL;
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))abort();
createbitree(T->lchild);
T->data=elem;
createbitree(T->rchild);
}
return 1;
}


int visit(TElemType e)
{
printf("%c ",e);
return 1;
}

int InOrderTraverse(BiTree T,int (*visit)(TElemType e))
{
if(T)
{
if(PreOrderTraverse(T->lchild,visit))
if(visit(T->data))
{
if(PreOrderTraverse(T->rchild,visit))
return 1;
}
else return 0;
}
return 1;
}

int main()
{
createbitree(T);
InOrderTraverse(T);
return 0;
}

...全文
55 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
thesecretblue 2009-05-24
  • 打赏
  • 举报
回复
if(T)
{
InOrdTraverse(T->lchild,f);
f(T);
InOrdTraverse(T->rchild,f);
}
}
allen303allen 2009-05-24
  • 打赏
  • 举报
回复
代码里建树部分如果是按前序输入的话可以达到前序建树的效果。
楼主想一下就知道,如果要中序建树的话就要按中序输入节点,那第一个是不是就输入空格?那不就是头节点为空就返回了?后面的输入都没用了。这棵树根本就没建立起来。所以单独的用递归来做中序建树是不行的吧。
中序遍历的代码也有问题吧,1楼给的是对的。
acdbxzyw 2009-05-24
  • 打赏
  • 举报
回复
递归由中序建立二叉树,小生愚钝,这个。。。这个。。。能实现么?
看你的代码是前序建树。。。
zsjsgyy 2009-05-24
  • 打赏
  • 举报
回复
void InOrdTraverse(BiTree T,void (*f)(BiTree p))
//中序遍历T,对每个节点调用函数Visit一次且仅一次。
{
if(T)
{
InOrdTraverse(T->lchild,f);
f(T);
InOrdTraverse(T->rchild,f);
}
}
前段时间写的

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧