二叉树节点类:
/*二叉树结点类BinTreeNode声明*/
template<class T>
class BinTreeNode {
private:
BinTreeNode * left, * right;//指向左右结点的指针
T data;//数据域
public:
BinTreeNode(const T& item, BinTreeNode * left = NULL, BinTreeNode * right = NULL) :data(item), left(left), right(right){}
BinTreeNode * getLeft() { return left; }
BinTreeNode * getRight() { return right; }
T& getData() { return data; }
void setLeft(BinTreeNode * left) { this->left = left; }
void setRight(BinTreeNode * right) { this->right = right; }
void setData(const T& item) { data = item; }
};
二叉树类:
/*二叉树类BinTree声明*/
template<class T>
class BinTree {
private:
BinTreeNode<T> * root;//指向二叉树根节点的指针
T stop;//公祖奥二叉树时的输入结束符,即:若输入stop则停止输入
public:
BinTree(BinTreeNode<T> * t=NULL):root(t){}//构造函数
virtual~BinTree() { del(root); }//析构函数,删除整棵二叉树
//在以结点t为根节点的子树中搜索结点p的父节点
BinTreeNode<T> * getFather(BinTreeNode<T> * t, BinTreeNode<T> * p);
//在以结点t为根结点的子树中查找data域为item的结点
BinTreeNode<T> * find(BinTreeNode<T> * t, const T& item);
//从树中删除结点t及其左右子树(包括删除之后的一些列更新操作)
void delSubTree(BinTreeNode<T> * t);
//删除结点t及其左右子树
void del(BinTreeNode<T> * t);
//先根遍历并输出以结点t为根结点的子树
void preOrder(BinTreeNode<T> * t);
//中根遍历并输出以结点t为根节点的子树
void InOrder(BinTreeNode<T> * t);
//后根遍历并输出以结点t为根结点的子树
void PostOrder(BinTreeNode<T> * t);
//层次遍历并输出以结点t为根结点的子树
void levelOrder(BinTreeNode<T> * t);
//非递归先根遍历并输出以结点t为根结点的子树
void NorecPreOrder(BinTreeNode<T> * t);
//非递归中根遍历并输出以结点t为根结点的子树
void NorecInOrder(BinTreeNode<T> * t);
//非递归后根遍历并输出以结点t为根节点的子树
void NorecPostOrder(BinTreeNode<T> * t);
//创建二叉树
void createBinTree(T stop);
//创建一棵二叉树并返回该二叉树的根结点
BinTreeNode<T> * create();
//复制以结