/*********构造二叉树*********/
输入一串以二叉树先序序列遍历的字符,空格表示空指针。
比如这串字符:ABD123CE4F5G678(为方便阅读,以数字代替空格),以先序顺序逆推出的二叉树应是:

从中观察出构造二叉树的算法:
以字符串的遍历为循环条件,构造一个栈来存放左右孩子指针都未被赋值的节点,空指针不允许入栈。
(1)循环开始前,让头节点先入栈
(2)str[i]表示当前字符(i初始值为1),若str[i-1]不是空格,那么str[i]一定是str[i-1]的左孩子;
若是空格,那么str[i]一定不是它的左孩子,即:str[i]一定是str[i-1]的右孩子,当右孩子被连接之后,
表明双亲节点的左右孩子指针均已赋值,那么就可以将这个双亲节点弹出,简化版:
if(str[i-1] != ' ')
{
top->leftchild = creat_node(str[i]);
}
else
{
top->rightchild = creat_node(str[i]);
pop(top);
}
(3)如果str[i]不是空格,在一次循环完毕之前,还应将它入栈
Warning:

本文介绍了如何非递归地构造二叉树,通过先序遍历的字符序列,利用栈存储节点。同时详细讲解了前序、中序和层次遍历二叉树的算法,以及遍历在计算节点数、求深度和销毁二叉树等场景的应用。在销毁二叉树时,后序遍历提供了简单有效的解决方案。
最低0.47元/天 解锁文章
8230

被折叠的 条评论
为什么被折叠?



