arrayBinaryTree.h
#include<iostream>
using namespace std;
#include<string>
class arrayBinaryTree
{
public:
arrayBinaryTree();
~arrayBinaryTree();
bool emppty()const;
int size()const;
void creatTree();//创建树
void preOrder(int i);//先序遍历
void inOrder(int i);//中序遍历
void postOrder(int i);//后序遍历
void preOrderOutput();//先序遍历输出
void inOrderOutput();//中序遍历输出
void postOrderOutput();//后序遍历输出
int height();//求树的高度
int height_recursion(int i);//递归求树高
int height_level();//层次遍历求树高
private:
char* element;
int count;
int len;
};
arrayBinaryTree.cpp
#include "arrayBinaryTree.h"
arrayBinaryTree::arrayBinaryTree()
{
element = NULL;
count = 0;
len = 0;
}
arrayBinaryTree::~arrayBinaryTree()
{
delete element;
}
bool arrayBinaryTree::emppty() const
{
return count == 0;
}
int arrayBinaryTree::size() const
{
return count;
}
void arrayBinaryTree::creatTree()
{
string str;
cin >> str;
len = str.length()+1;
if (element != NULL) {
delete element;
count = 0;
}
element = new char[len];
for (int i = 1; i < len; i++) {
element[i] = str[i-1];
if (str[i] != '#') {
count++;
}
}
}
void arrayBinaryTree::preOrder(int i)
{
if (element[i] != '#' and i < len) {
cout << element[i] << " ";
preOrder(2 * i);
preOrder(2 * i + 1);
}
}
void arrayBinaryTree::inOrder(int i)
{
if (element[i] != '#' and i < len) {
inOrder(2 * i);
cout << element[i] << " ";
inOrder(2 * i + 1);
}
}
void arrayBinaryTree::postOrder(int i)
{
if (element[i] != '#' and i < len) {
postOrder(2 * i);
postOrder(2 * i + 1);
cout << element[i] << " ";
}
}
void arrayBinaryTree::preOrderOutput()
{
preOrder(1);
cout << "\n";
}
void arrayBinaryTree::inOrderOutput()
{
inOrder(1);
cout << "\n";
}
void arrayBinaryTree::postOrderOutput()
{
postOrder(1);
cout << "\n";
}
int arrayBinaryTree::height()
{
return height_recursion(1);
}
int arrayBinaryTree::height_recursion(int i)
{
if (element[i] == '#' || i >= len)
return 0;
else {
int l1 = height_recursion(2 * i);
int l2 = height_recursion(2 * i + 1);
return max(l1 , l2) + 1;
}
}
int arrayBinaryTree::height_level()
{
int t = 0,m=1,i=1;
while (i < len) {
t++;
i = i + m;
m *= 2;
}
return t;
}
Test.cpp
#include<iostream>
using namespace std;
#include"arrayBinaryTree.h"
int main() {
arrayBinaryTree t;
t.creatTree();
cout << "先序遍历:";
t.preOrderOutput();
cout << "中序遍历:";
t.inOrderOutput();
cout << "后序遍历:";
t.postOrderOutput();
cout << "层次求树的高度为:" << t.height_level()<<"\n";
cout << "递归求树的高度为:" << t.height();
return 0;
}