题目
利用先序递归遍历算法创建二叉树并计算该二叉树的宽度。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树的宽度(是指二叉树每层节点数的最大值)。需要注意输入数据序列中"#"字符和非"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。
1、 算法功能(查找树的宽度)
2、 利用树的层次遍历(应用队列)
3、 思考思路:
在树的层次遍历中发现通过一层的宽度我可以通过这一层递归找到下层的宽度,不过这个过程中需要初始化一个宽度为1(因为根的宽度为1),另外需要一个计数器记住当前层数的宽度,并把这个值赋给宽度(用来实现循环的结束条件)。整个过程会用到队列,
当队列中一层每到一个节点把自己弹出,把它的儿子压进队列,最后用MaxWidth保存树的最大宽度即可。
代码如下:
#include<iostream>
usingnamespace std;
#include<malloc.h>
typedefcharElement;//定义Elemnet为字符型
typedefstructnode//二叉树链式存储节点BTNode声明
{
Element data;//数据元素
structnode *lchild;//左孩子
structnode *rchild;//右孩子
}BTNode;
#defineMaxsize 100
typedefstruct
{ <