二叉树的创建
构建二叉树的类对象
在创建一棵二叉树之前,我们先创建一个二叉树的类对象Tree。类中包含的成员变量有:val、left、right,函数接口包括:先序遍历、中序遍历、后序遍历、层序遍历、二叉树高度
typedef int TreeElemt;
class Tree{
public:
enum Mode{
NUM, CHAR};
private:
TreeElemt val;
Tree *left;
Tree *right;
Mode mode;
public:
Tree(); // 默认构造函数
Tree(TreeElemt ch); // 构造一个val为ch的结点
~Tree();
// 前中后层序遍历
void PreOrder();
void InOrder();
void PostOrder();
// 前中后层序遍历——非递归
friend void PreOrder_(const Tree* t);
friend void InOrder_(Tree* t);
friend void PostOrder_(Tree* t);
// 层序遍历
friend void LevelOrder_(Tree* t);
// 二叉树的最大高度
int maxHeight();
// 二叉树的最小高度:根节点到叶子结点(注意是到叶子节点)
int minHeight();
// 初始化二叉树
friend Tree* InitialTree(const std::vector<TreeElemt>& t, int i);
};
由于有些函数用成员函数不好操作,所以我将函数设置为友元
下面我们将逐步实现上面类中的接口函数。
创建二叉树
// 创建二叉树
Tree* InitialTree(const std::vector<TreeElemt>& t, int i){
Tree* root = new Tree(t[i]); // 构建根节点
if (2 * i + 1 < t.size()) root->left = InitialTree(t, 2 * i + 1); // 构建左子树
if (2 * i + 2 < t.size()) root->right = InitialTree