简单笔记哈,以免再次犯错误:
typedef struct BITree{
char data;
struct BITree *left;
struct BITree *right;
}BITree ,*BITreePtr;
//遍历二叉树,递归时容易出现的错误
/*当第一次将左指针参数传入时,形参指针tree指向了tree->left
后tree=(BITree *)malloc(sizeof(BITree)); tree指向了新的地址
tree->left并不指向新的地址,所以始终只有一个值,tree->right同样的道理
虽然每次递归调用结束,如:createBITree(tree->left); 都有return tree;
换回的这个tree没有变量接受,故调用结束,tree的生命周期结束,直到递归到最后一个
tree换回给主函数变量tree;造成只有一个节点;
*/
//BITree *createBITree(BITree *tree)
//{
// char a;
// scanf("%c",&a);
// //当第一位为空时直接换回空值
// if (a == ' ')
// {
// tree= NULL;
// }else{
// tree=(BITree *)malloc(sizeof(BITree));
// tree->data=a;
// createBITree(tree->left);
// createBITree(tree->right);
// }
//
//
// return tree;
//}
//应该改正为
BITree *createBITree()
{
char a;
BITree *tree;
scanf("%c",&a);
// cin>>a;
//当第一位为空时直接换回空值
if (a == ' ')
{
//tree= NULL;
return NULL;
}else{
tree=(BITree *)malloc(sizeof(BITree));
tree->data=a;
tree->left=createBITree();
tree->right=createBITree();
}
return tree;
}