我试图找到建立二叉树的方法。几乎所有现有方法如下面的代码:
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,还有其他方法可以建立二叉树吗?
答案 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
。对于算法本身,您可以使用" previous"来创建一个没有递归的二叉树。每个节点中的指针,指向树中的向上(类似于双链表)。这样的实现消耗更多的数据存储器,因为每个节点必须存储额外的指针,但是堆栈存储器要少得多。删除了递归带来的堆栈溢出问题。并且它们可以更快地执行更多,因为删除了递归函数调用开销。