回 帖 发 新 帖 刷新版面

主题:[原创]二叉树的构造

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个回复)

沙发

用插入的方法构造二叉树.
分别是插入左子树和右子树.
插入左子树的方法如下,同理可以得到插入右子树.
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;
}

随便写了写希望你能看的懂!

板凳

首先,先谢谢。你说的算法以前用C++叉树的时候也是这么做。我传上去的是我们教材构造二叉树的算法,我不知道错哪?

3 楼

应该没有问题的啊

4 楼

我也看不出什么问题,但运行起来就有这么一个问题,我也不知道是怎么回事

5 楼


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 楼

我估计与你的数据输入有关的,请把你的数据输入过程贴出来看看

7 楼

这个构造算法,如果123456789连续这么输入,那要在后面连续输入很多空格才能退得出来,
preOrder: 123456789
InOrder: 987654321
PostOrder:987654321
如果1 2 3 4 5 6 7 8 9最后一个数后面要再输入两空格才退出,
preOder:123456789
InOrder:123456789
PostOrder:987654321

我来回复

您尚未登录,请登录后再回复。点此登录或注册