calamus
calamus
冬天从这里夺去的,春天会交还与你。

一个简单的创建和遍历二叉树的C++程序,二叉树的其他操作程序待更新。

#include <iostream>  
using namespace std;  
struct BiTNode{  
 char data;  
 struct BiTNode *lchild, *rchild;//左右孩子  
};  
BiTNode*T;  
void CreateBiTree(BiTNode* &T);  
void Inorder(BiTNode* &T);  
void PreOrderTraverse(BiTNode* &T);  
void Posorder(BiTNode* &T);  

int main(){  
cout<<"创建一颗树,其中A->Z字符代表树的数据,用“#”表示空树:"<<endl;  
  CreateBiTree(T);  
cout<<"先序递归遍历:"<<endl;  
PreOrderTraverse(T);  
cout<<endl;  
cout<<"中序递归遍历:"<<endl;  
  Inorder(T);  
cout<<endl;  
cout<<"后序递归遍历:"<<endl;  
        Posorder(T);  
cout<<endl;  
  return 1;}  

//=============================================先序递归创建二叉树树  
void CreateBiTree(BiTNode* &T){  
 //按先序输入二叉树中结点的值(一个字符),空格字符代表空树,  
 //构造二叉树表表示二叉树T。  
 char ch;  
 if((ch=getchar())=='#')T=NULL;//其中getchar()为逐个读入标准库函数  
 else{  
  T=new BiTNode;//产生新的子树  
  T->data=ch;//由getchar()逐个读入来  
  CreateBiTree(T->lchild);//递归创建左子树  
  CreateBiTree(T->rchild);//递归创建右子树  
 }  
}//CreateTree  

//===============================================先序递归遍历二叉树  
void PreOrderTraverse(BiTNode* &T){  
 //先序递归遍历二叉树  
 if(T){//当结点不为空的时候执行  
  cout<<T->data;  
  PreOrderTraverse(T->lchild);//  
  PreOrderTraverse(T->rchild);  
 }  
 else cout<<"";  
}//PreOrderTraverse  

//================================================中序遍历二叉树  
void Inorder(BiTNode* &T){//中序递归遍历二叉树  
 if(T){//bt=null退层  
  Inorder(T->lchild);//中序遍历左子树  
  cout<<T->data;//访问参数  
  Inorder(T->rchild);//中序遍历右子树  
 }  
 else cout<<"";  
 }//Inorder  

//=================================================后序递归遍历二叉树  
void Posorder(BiTNode* &T){  
 if(T){  
  Posorder(T->lchild);//后序递归遍历左子树  
  Posorder(T->rchild);//后序递归遍历右子树  
  cout<<T->data;//访问根结点  
 }  
 else cout<<"";  
}  

 

posted on 2016-09-15 23:29  calamus  阅读(6061)  评论(0编辑  收藏  举报