c++ 简单二叉树实现
基本的构造,先序、中序、后序遍历功能。
#ifndef BINTREE_H
#define BINTREE_H
#include <iostream>
using namespace std;
typedef int TYPE;
class BinTree
{
public:
struct Node{
TYPE date;
Node *lchild, *rchild;
Node(TYPE d = TYPE()) :lchild(NULL), rchild(NULL), date(d){};
};
typedef Node *NodePointer;
public:
BinTree();
//构造一颗树
//T类型的指针a,传参时传一个数组,负责传入数据
//size保存数组a 的大小
//index记录下标
//invalid表示非法值。
BinTree(const TYPE *a, int size, int &index, const TYPE& invalid){
root = MakeTree(a, size, index, invalid);
}
~BinTree();
//前序遍历
void PreOrder(){
Pre(root);
cout << endl;
};
//中序遍历
void InOrder(){
In(root);
cout << endl;
};
//中序遍历
void PostOrder(){
Post(root);
cout << endl;
};
private:
NodePointer root; //根节点
private:
NodePointer MakeTree(const TYPE *a, int size, int &index, const TYPE& invalid){
NodePointer node = NULL;
if (index < size&&a[index] != invalid){
node = new Node(invalid);
node->date = a[index];
node->lchild = MakeTree(a, size, ++index, invalid);
node->rchild = MakeTree(a, size, ++index, invalid);
}
return node;
}
void Destroy(NodePointer all_node){
NodePointer node = all_node;
if (node){
Destroy(node->lchild);
Destroy(node->rchild);
delete node;
node = NULL;
}
}
void Pre(NodePointer all_node);
void In(NodePointer all_node);
void Post(NodePointer all_node);
};
BinTree::BinTree()
{
root = NULL;
}
BinTree::~BinTree()
{
Destroy(root);
}
void BinTree::Pre(NodePointer all_node){
NodePointer node = all_node;
if (node){
cout << node->date << " ";
Pre(node->lchild);
Pre(node->rchild);
}
}
void BinTree::In(NodePointer all_node){
NodePointer node = all_node;
if (node){
In(node->lchild);
cout << node->date << " ";
In(node->rchild);
}
}
void BinTree::Post(NodePointer all_node){
NodePointer node = all_node;
if (node){
Post(node->lchild);
Post(node->rchild);
cout << node->date << " ";
}
}
#endif