主题:[原创]二叉树的构造
Punk
[专家分:60] 发布于 2006-04-19 18:48:00
Status CreateBiTree(BiTree &T)
{ // 按先序次序输入二叉树中结点的值(字符型),
//构造二叉链表表示的二叉树T
TElemType ch;
scanf("%c", &ch);
if (ch == 32) // 空
T = NULL;
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
if(!T)
exit(OVERFLOW);
T->data = ch; // 生成根结点
CreateBiTree(T->lchild); // 构造左子树
CreateBiTree(T->rchild); // 构造右子树
}
return OK;
}
这个算法构造出来的树只有左子树,请大家不吝同赐教
回复列表 (共7个回复)
沙发
flysun0311 [专家分:2040] 发布于 2006-04-19 23:29:00
用插入的方法构造二叉树.
分别是插入左子树和右子树.
插入左子树的方法如下,同理可以得到插入右子树.
BiTreeNode *InsertLeftNode(BiTreeNode *curr,DataType x)
{
BiTreeNode *s,*t;
if(curr==NULL)
return NULL;
t=curr->leftChild;
s=(BiTreeNode*)malloc(sizeof(BiTreeNode));
s->data=x;
s->leftChild=t;
s->rightChild=NULL;
curr_>leftChild=s;
retrun curr->leftChild;
}
随便写了写希望你能看的懂!
板凳
Punk [专家分:60] 发布于 2006-04-20 19:09:00
首先,先谢谢。你说的算法以前用C++叉树的时候也是这么做。我传上去的是我们教材构造二叉树的算法,我不知道错哪?
3 楼
海上飞洪 [专家分:520] 发布于 2006-04-20 20:28:00
应该没有问题的啊
4 楼
Punk [专家分:60] 发布于 2006-04-20 23:06:00
我也看不出什么问题,但运行起来就有这么一个问题,我也不知道是怎么回事
5 楼
聚散缘 [专家分:90] 发布于 2006-04-21 14:33:00
Bintree create_tree()
{
Bintree T;
char c;
c=gets();
if(c=="#")
T==NULL;
else
{
T=(Bintree)malloc(sizeof(BintreeNode));
T->info=c;
T->llink=create_tree();
T->rlink=create_tree();
}
return(T);}
6 楼
boxertony [专家分:23030] 发布于 2006-04-21 14:51:00
我估计与你的数据输入有关的,请把你的数据输入过程贴出来看看
7 楼
Punk [专家分:60] 发布于 2006-04-21 19:50:00
这个构造算法,如果123456789连续这么输入,那要在后面连续输入很多空格才能退得出来,
preOrder: 123456789
InOrder: 987654321
PostOrder:987654321
如果1 2 3 4 5 6 7 8 9最后一个数后面要再输入两空格才退出,
preOder:123456789
InOrder:123456789
PostOrder:987654321
我来回复