#include<iostream>
using namespace std;
#define BinNodePosi(T) BinNode<T>* //节点位置
//BinNode模板类的设计
template<typename T>
struct BinNode
{
BinNodePosi(T) parent, lc, rc;
T data; int lenght;
int size();
BinNodePosi(T) insertAsLC(T const &); //作为左孩子插入新的节点
BinNodePosi(T) insertAsRC(T const &); //作为右孩子插入新的节点
BinNodePosi(T) succ(); //(中序遍历下)当前节点的直接后继
template <typename VST> void travLevel(VST &);//子树层次遍历
template <typename VST> void travPre(VST &); //子树先序遍历
template <typename VST> void travIn(VST &); //子树中序遍历
template <typename VST> void travPost(VST &); //子树后序遍历
};
//------BinNode接口实现------
template<typename T>
BinNodePosi(T) BinNode<T>::insertAsLC(T const &e) {
return lc = new BinNode(e, this);
}
template<typename T>
BinNodePosi(T) BinNode<T>::insertAsRC(T const &e) {
return rc = new BinNode(e, this);
}
template <typename T>
int BinNode<T>::size() {
int s = 1;
if (lc){
s += lc->size();
}
if (rc) {
s += rc->size();
}
return s;
}
