BiTree.h
#ifndef BiTree_H #define BiTree_H//避免重复包含BiTree的头文件 //定义二叉链表的节点 struct BiNode { char data;//假设二叉树的结构类型为char型 BiNode *lchild,*rchild; } ; class BiTree { public: BiTree() { root=Creat(root); } ~BiTree() { Release(root);//释放节点的储存空间 } void PreOrder() { PreOrder(root);//前序遍历二叉树 } void InOrder() { InOrder(root);
BiTree.cpp
#include<iostream> using namespace std; #include"Bitree.h" //以下是BiTree的成员函数定义 BiNode *BiTree::Creat(BiNode *bt) { char ch; cout<<"请输入创建一棵二叉树的节点数据"<<endl ; cin>>ch; if(ch=='#') return NULL; else { bt=new BiNode;//输入的字符赋给下一个节点 bt->data=ch;//生成一个节点数据域为ch bt->lchild=Creat(bt->lchild);//递归建立左子树 bt->rchild=Creat (bt->rchild);//递归建立右子树 } return bt; } void BiTree::Release(BiNode *bt) { if(bt!=NULL) { Release(bt->lchild); Release(bt->rchild); delete bt; } } void BiTree::PreOrder(BiNode *bt) { if(bt==NULL)//如果头结点为空 则返回 return; else { cout<<bt->data<<" ";//否则访问根节点的数据域 PreOrder(bt->lchild);//前序遍历根节点的左子树 PreOrder(bt->rchild); //前序遍历根节点的右子树 } } void BiTree:: InOrder(BiNode *bt) { if(bt==NULL) return; else { InOrder(bt->lchild); cout<<bt->data<<" "; InOrder(bt->rchild); } } void BiTree::PostOrder(BiNode *bt) { if(bt==NULL) return; else { PostOrder(bt->lchild); PostOrder(bt->rchild); cout<<bt->data<<" "; } }
} void PostOrder(){PostOrder(root);//后续遍历二叉树 }private: BiNode *root;//指向根节点的头指针 BiNode *Creat(BiNode *bt); //调用构造函数void Release(BiNode *bt) ;//西沟函数的调用void PreOrder(BiNode *bt);void InOrder(BiNode *bt);void PostOrder(BiNode *bt); } ;#endif
Bitree_main.cpp
#include<iostream> using namespace std; #include"Bitree.h" int main() { BiTree T;//创建一棵二叉树 cout<<"---------前序遍历-----------"<<endl; T.PreOrder(); cout<<endl; cout<<"---------中序遍历-----------"<<endl; T.InOrder(); cout<<endl; cout<<"---------后序遍历-----------"<<endl; T.PostOrder(); cout<<endl; return 0; }