简介
采用面向对象的方法创建二叉树
代码
#include <iostream>
using namespace std;
template<class T>
struct BiNode
{
T data;
BiNode<T>* left;
BiNode<T>* right;
BiNode(const T& x) : data(x), left(NULL), right(NULL) {}
};
template<class T>
class BiTree
{
public:
//构造一颗树
//T类型的指针a,传参时传一个数组,负责传入数据
//size保存数组a 的大小
//index记录下标
//invalid表示非法值。
BiTree(T* a, size_t n, const T&invalid)
{
size_t index = 0;
root = CreateTree(a, n, invalid, index);
}
~BiTree()
{
Destroy(root);
};
void PreOrder()
{
Pre(root);
}
void InOrder()
{
In(root);
}
void PostOrder()
{
Post(root);
}
private:
BiNode<T>* root = NULL; //树根
BiNode<T>* CreateTree(const T *a, size_t size, const T& invalid, size_t &index);//创建一棵树
void Destroy(BiNode<T>* all_node); //销毁一棵树
void Visit(BiNode<T>* node); //访问节点
void Pre(BiNode<T>* node); //先序
void In(BiNode<T>* node); //中序
void Post(BiNode<T>* node); //后序
};
template<class T>
BiNode<T>* BiTree<T>::CreateTree(const T *a, size_t size, const T& invalid, size_t &index)
{
BiNode<T>* node = NULL;
if (a[index] != invalid)
{
node = new BiNode<T>(a[index]);
//root->data = a[index];
node->left = CreateTree(a, size, invalid, ++index);
node->right = CreateTree(a, size, invalid, ++index);
}
return node;
}
template<class T>
void BiTree<T>::Destroy(BiNode<T>* all_node)
{
BiNode<T>* node = all_node;
if (node)
{
Destroy(node->left);
Destroy(node->right);
delete node;
node = NULL;
}
}
template<class T>
void BiTree<T>::Visit(BiNode<T>* node)
{
if(node)
{
cout << node->data << " ";
}
}
template<class T>
void BiTree<T>::Pre(BiNode<T>* node)
{
if(node)
{
Visit(node);
Pre(node->left);
Pre(node->right);
}
}
template<class T>
void BiTree<T>::In(BiNode<T>* node)
{
if(node)
{
In(node->left);
Visit(node);
In(node->right);
}
}
template<class T>
void BiTree<T>::Post(BiNode<T>* node)
{
if(node)
{
Visit(node);
Pre(node->left);
Pre(node->right);
}
}
int main()
{
int array[] = {1, 2, 3, -1, -1, 4, -1, -1, 2, 4, -1, -1, 3, -1, -1};
BiTree<int> root(array, sizeof(array), -1);
root.PreOrder();
cout << endl;
root.InOrder();
cout << endl;
root.PostOrder();
return 0;
}
输出
先序:1 2 3 4 2 4 3
中序:3 2 4 1 4 2 3
后序:1 2 3 4 2 4 3
树结构
1 / \ 2 2 / \ / \ 3 4 4 3