要求
编写二叉树类的成员函数,分别实现以下功能:
① 交换二叉树中所有节点的左右子树。
② 按层次顺序遍历二叉树:首先访问根节点,然后是它的两个孩子节点,然后是孙子节点,依此类推。(将结果输出至屏幕)
③ 求二叉树的宽度,即同一层次上最多的节点数。(将结果输出至屏幕)
分析
观察这个二叉树,发现只是并不是完全二叉树。可以用书上makeTree的方法挨个建立,但是觉得太过麻烦。这里采用了使用数组的方法建立二叉树。发现整个树中没有数据0,我们将所有null都补位0,化成一个满二叉树,利用反中序的方法建立二叉树。
对于交换,我们利用递归的方法。
放码过来
#include<queue>
#include <iostream>
using namespace std;
class Tnode //二叉树 数据结构
{
public:
int data;
Tnode *left,*right;
Tnode(){}
Tnode(const char data,Tnode *left=NULL,Tnode *right=NULL):data(data), left(left), right(right)
{}
};
Tnode *arrayTotree(int a[] , int start,int end ) //按照中序顺序的数组输入 生成二叉树
{
if(start>end)
{
return NULL;
}
int m = start+(end-start)/