设置二叉树的替代方法?

时间:2015-07-03 14:04:54

标签: c binary-tree

我试图找到建立二叉树的方法。几乎所有现有方法如下面的代码:

BiTree CreateBiTree(){
    char ch;
    BiTree T;
    scanf("%c",&ch);
    if(ch=='#')T=NULL;
    else{
        T = (BiTree)malloc(sizeof(BiTNode));
        T->data = ch;
        T->lchild = CreateBiTree();
        T->rchild = CreateBiTree();
    }
    return T;
}

这样的方法喜欢PreOrderTraverse,还有其他方法可以建立二叉树吗?

2 个答案:

答案 0 :(得分:0)

此:

T = (BiTree)malloc(sizeof(BiTNode));

应该是

T = malloc(sizeof *T);

Don't cast the return value of malloc() in C,并使用sizeof

C中的大写变量名称非常罕见且令人困惑,在我看来,你不应该{* 1}}远离指针星号。

答案 1 :(得分:0)

  • 我猜BiTree是隐藏在typedef后面的指针?这是非常糟糕的做法,因为它使代码难以理解。将BiTree typedef更改为普通typedef struct
  • 避免在递归函数中使用scanf()或任何其他复杂函数,如果没有它,递归就足够慢。 (递归函数通常很糟糕,因为它们非常无效且难以阅读,二叉树是它们唯一有效的用途。)
  • 不要施放malloc的返回值。

对于算法本身,您可以使用" previous"来创建一个没有递归的二叉树。每个节点中的指针,指向树中的向上(类似于双链表)。这样的实现消耗更多的数据存储器,因为每个节点必须存储额外的指针,但是堆栈存储器要少得多。删除了递归带来的堆栈溢出问题。并且它们可以更快地执行更多,因为删除了递归函数调用开销。