二叉树的创建以及遍历一般都采用递归的方式进行,当然也有非递归的方式,本文不做讨论。本文二叉树的创建是根据先序遍历的结果进行建树的,空节点用#补满,具体样例见文末的测试数据。下面附上代码:
#include <iostream>
#include <queue>
#include <string>
using namespace std;
//定义节点的结构
class TreeNode {
public:
char value;
TreeNode *lchild;
TreeNode *rchild;
TreeNode(char value) {
this->value = value;
lchild = NULL;
rchild = NULL;
}
};
class BiTree {
public:
TreeNode *root; //根节点
string pre_Array;//存储先序遍历结果的数组
int index;//索引上述数组的位置
BiTree();
TreeNode* createTree();//建树
void preOrderTraversal(TreeNode *node);//先序遍历
void sequentialTraversal(TreeNode *node);//中序遍历
void postOrderTraversal(TreeNode *node);//后序遍历
void levelTraversal();//层次遍历
int getHeight(TreeNode *node);//获得二叉树的高度,一般认为树的深度与树的高度是相等的,但是外国有相关文献认为是不等的
};
BiTree::BiTree() {
cin>>pre_Array;
index = 0;
root = createTree();
}
TreeNode* BiTree::createTree() {
TreeNode *node;
char value = pre_Array[i