今天上午在(先序)递归创建二叉树时遇到了一个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)开辟空间了。实属粗心,谨记。
时间: 2024-10-09 01:41:45