数据结构_树_二叉树的建立、遍历、复制与移除_二叉链表存储_C++实现

"head.h"


#include<iostream> using namespace std; class BitNode { public: BitNode(); char ch; BitNode *lchild,*rchild; }; BitNode::BitNode() { lchild=rchild=NULL; } class BiTree { public: BiTree(); void CreatBiTree();//建立二叉树 void Traverse();//遍历二叉树 void CopyBiTree();//复制二叉树 private: void ReMoveBiTree(BitNode *&);//移除整棵二叉树 void PreOrderCreatBiTree(BitNode *&);//先序建立二叉树 void PreOrderTraverse(BitNode *&);//先序遍历二叉树 void InOrderTraverse(BitNode *&);//中序遍历二叉树 void PostOrderTraverse(BitNode *&);//后序遍历二叉树 void Copy(BitNode *&,BitNode *&);//复制二叉树 BitNode * root; char ch; }; BiTree::BiTree() { root=NULL; } void BiTree::CreatBiTree() { cout<<"CreatBiTree Called !"<<endl<<endl; if(root!=NULL) ReMoveBiTree(root); char choice; cout<<"You Choice , Please ?"<<endl<<endl <<"1 . PreOrderCreatBiTree"<<endl <<"9 . Quit"<<endl<<endl; cin>>choice; cout<<"Please Enter The BitTree :"<<endl<<endl; switch(choice) { case '1': PreOrderCreatBiTree(root); break; case '9': break; default: cout<<"No Such Choice !"<<endl<<endl; break; } cin.clear(); } void BiTree::Traverse() { cout<<"Traverse Called !"<<endl<<endl; if(root==NULL) { cout<<"BiTree Is Empty !"<<endl<<endl; return ; } char choice; cout<<"You Choice , Please ?"<<endl<<endl <<"1 . PreOrderTraverse"<<endl <<"2 . InOrderTraverse"<<endl <<"3 . PostOrderTraverse"<<endl <<"9 . Quit"<<endl<<endl; cin>>choice; switch(choice) { case '1': PreOrderTraverse(root); break; case '2': InOrderTraverse(root); break; case '3': PostOrderTraverse(root); break; case '9': break; default: cout<<"No Such Choice !"<<endl<<endl; break; } cout<<endl<<endl; } void BiTree::PreOrderTraverse(BitNode * &t) { if(t!=NULL) { cout<<t->ch; PreOrderTraverse(t->lchild); PreOrderTraverse(t->rchild); } } void BiTree::InOrderTraverse(BitNode *& t) { if(t!=NULL) { InOrderTraverse(t->lchild); cout<<t->ch; InOrderTraverse(t->rchild); } } void BiTree::PostOrderTraverse(BitNode *& t) { if(t!=NULL) { PostOrderTraverse(t->lchild); PostOrderTraverse(t->rchild); cout<<t->ch; } } void BiTree::PreOrderCreatBiTree(BitNode *& t) { if(cin>>ch) { if(ch=='#') t=NULL; else { t=new BitNode; t->ch=ch; PreOrderCreatBiTree(t->lchild); PreOrderCreatBiTree(t->rchild); } } } void BiTree::ReMoveBiTree(BitNode *& t) { if(t!=NULL) { ReMoveBiTree(t->lchild); ReMoveBiTree(t->rchild); delete t; } } void BiTree::CopyBiTree() { cout<<"Copy BiTree Called !"<<endl<<endl; if(root==NULL) { cout<<"No BiTree To Copy !"<<endl<<endl; return; } BitNode * t; Copy(t,root); PreOrderTraverse(t); cout<<endl<<endl; InOrderTraverse(t); cout<<endl<<endl; PostOrderTraverse(t); cout<<endl<<endl; ReMoveBiTree(t); } void BiTree::Copy(BitNode *&t,BitNode *&r) { if(r!=NULL) { t=new BitNode; t->ch=r->ch; Copy(t->lchild,r->lchild); Copy(t->rchild,r->rchild); } }


"main.h"


#include<iostream> #include"head.h" using namespace std; int main() { BiTree t; char choice; while(1) { cout<<"You Choice , Please ?"<<endl<<endl <<"1 . CreatBiTree"<<endl <<"2 . Traverse"<<endl <<"3 . CopyBiTree"<<endl <<"9 . Quit"<<endl<<endl; cin>>choice; switch(choice) { case '1': t.CreatBiTree(); break; case '2': t.Traverse(); break; case '3': t.CopyBiTree(); break; case '9': return 0; break; default: cout<<"No Such Choice !"<<endl<<endl; break; } } return 0; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值