今天在写二叉树创建和遍历,创建函数用的是先序输入、递归创建,原代码是这样的:
/*定义二叉树结点数据结构*/
struct TreeNode {
char Data;
struct TreeNode* left;
struct TreeNode* right;
}TreeNode;
/*定义指向二叉树的指针*/
typedef struct TreeNode* BT;
/*接收用户输入先序创建二叉树*/
BT createBT()
{
BT root;
char data;
scanf_s("%c", &data);
if (data == ".")
return NULL; //.表示该结点没有孩子结点,返回NULL
else {
root = (BT)malloc(sizeof(TreeNode));
root->Data = data;
root->left = createBT();
root->right = createBT();//调整Data和left、right的顺序也可以得到中序、后序创建二叉树。
}
return root;
}
然后在主函数里调用创建函数创建二叉树:
BT root;
root=createBT();
自我感觉一点问题都没有,且程序也成功运行起来了。
但输入二叉树的时候发现程序停在createBT()
这一句根本出不去,无法进行接下来的遍历。
想半天都没看出来哪错了(甚至代码是参照各位网友的,看不出任何错误)
最后决定从解决warning下手,然后看到了这样一条warning:
“==”:“int”与“char [2]”的间接级别不同
感觉有些奇怪,查了一下发现是指char
类型是字符变量,那么和它所比较的也应当是字符不是字符串,而由单引号''
括起来的是字符、双引号""
括起来的是字符串,也就是这一句:
if (data == ".")
...
应当修改为:
if (data == '.')
...
改完以后果然运行成功了: