递归创建二叉树遇到的一个bug

今天上午在(先序)递归创建二叉树时遇到了一个bug,以下是程序部分:

(关于递归创建二叉树这位前辈讲的很清楚,http://blog.csdn.net/stpeace/article/details/8138303)

 1 void PreTraverse(PBiNode T)
 2 {
 3     if(!T)
 4         return;
 5     printf("%c", T->data);
 6     PreTraverse(T->leftch);
 7     PreTraverse(T->rightch);
 8 }
 9 void CreateBiTree(PBiNode &root)
10 {
11     char c;
12     scanf("%c", &c);
13     if('#' == c)
14         root = NULL;
15     else 
16     {
17         root = (PBiNode)malloc(sizeof(PBiNode));
18         root->data = c;
19         CreateBiTree(root->leftch);
20         CreateBiTree(root->rightch);
21     }
22 }
23 int main(void)
24 {
25     PBiNode root;
26 
27     CreateBiTree(root);
28     printf("PreOrderTra: ");
29     PreTraverse(root);
30     return 0;
31 }

 

  程序运行后一直没有输出前序遍历信息(确定前序遍历程序正确),起初以为是补充“#”(当作叶子节点)后没有按先序顺序输入,然后就输入了一个简单的“A##",程序仍然不能执行,百思不得其解。bug本身很简单,因为粗心导致的,不知道你有没有看出来?

  待到回头看到CreateBiTree函数体时,才恍然大悟,原来是else下面的那句malloc出错了,本应该为一个树节点开辟空间,却写成了为一个树节点指针(PBiNode)开辟空间了。实属粗心,谨记。

posted on 2015-09-01 10:42  Jaqen  阅读(330)  评论(0编辑  收藏  举报