#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;

}