#include<iostream>
#include<cstdlib>
using namespace std;
template<typename T>class node {
node<T> *lchild, *rchild;
T info;
public:
node() { lchild = NULL, rchild = NULL; }
node(T data, node<T> *left = NULL, node<T> *right = NULL) {
info = data;
lchild = left;
rchild = right;
}
friend class binarytree(typename T);
};
template<typename T>class binarytree {
node<T> *root;
void inorder(node<T>*current);
void preorder(node<T>*current);
void postorder(node<T>*current);
void insert(const T&data, node<T>*b);
void destory(node<T>*current);
public:
binarytree() { root = NULL; }
~binarytree() { destory(root); }
void creat(T*data, int n);
void inorder() { inorder(root); }
void preorder() { preorder(root); }
void postorder() { postorder(root); }
};
template<typename T>void binarytree<T>::destory(node<T>*current) {
if (current != NULL) {
destory(current->lchild);
destory(current->rchild;
delete current;
}
}
template<typename T>void binarytree<T>::insert(const T&data, node<T>*&b) {
if (b = NULL) {
b = new node<T>(data);
if (b == NULL) {
cout << "空间不足" << endl;
exit(1);
}
}
else if (data < b->info) insert(data, b->lchild);
else insert(data, b->rchild);
}
template<typename T>void binarytree<T>::creat(T*data, int n) {
int i;
for (i = 0; i < n; i++) insert(data[i], root);
}
template<typename T> void binarytree<T>::inorder(node<T>* current) {
if (current != NULL) {
inorder(current->lchild);
cout << current->info << '\t';
inorder(current->rchild);
}
}
template<typename T> void binarytree<T>::preorder(node<T>* current) {
if (current != NULL) {
cout << current->info << '\t';
preorder(current->lchild);
preorder(current->rchild);
}
}
template<typename T> void binarytree<T>::postorder(node <T>* current) {
if (current != NULL) {
postorder(current->lchild);
postorder(current->rchild);
cout << current->info << '\t';
}
}
void main() {
int i;
cout << "1.初始化二叉树:" << " 2.按先序序列建立二叉树" << " 3.判断二叉树是否为空:" << " 5.求二叉树的深度" << " 6.求二叉树节点个数" << endl;
}