实验五 二叉树(链表)

#include<iostream>    
using namespace std;    
template<class T>  
struct BiNode    
{    
T data;    
BiNode<T> *lchild,*rchild,*parent;    
};    
template<class T>  
class BiTree    
{    
private:  
    BiNode<T> *root;                      
    BiNode<T> *creat(BiNode<T> *bt);          
    void Release(BiNode<T> *bt);           
    void Preorder(BiNode<T> *bt);        
    void Inorder(BiNode<T> *bt);         
    void Postorder(BiNode<T> *bt);       
    void Print(BiNode<T> *bt);            
    void Creatparent(BiNode<T> *bt);       
    void Getleaf(BiNode<T> *bt);         
public:    
    BiTree()  
    {    
        root=creat(root);root->parent=NULL;  
    }    
    ~BiTree(){Release(root);}        
    void Preorder(){Preorder(root);}           
    void Inorder(){Inorder(root);}          
    void Postorder(){Postorder(root);}      
    void Print(){Print(root);}    
    void Creatparent(){Creatparent(root);}    
    void Getleaf(){Getleaf(root);}    
};  
template<class T>    
BiNode<T> *BiTree<T>::creat(BiNode<T> *bt)         
{    
    char ch;    
cin>>ch;    
if(ch=='0') return NULL;    
else     
{    
bt=new BiNode<T>;    
bt->data=ch;    
bt->lchild=creat(bt->lchild);    
bt->rchild=creat(bt->rchild);    
}    
return bt;    
}    
template<class T>  
void BiTree<T>::Release(BiNode<T> *bt)         
{    
    if(bt!=NULL)    
    {    
    Release(bt->lchild);    
    Release(bt->rchild);    
    delete bt;    
    }    
}    
template<class T>  
void BiTree<T>::Preorder(BiNode<T> *bt)         
{    
if(bt==NULL) return;    
else    
{    
cout<<bt->data<<" ";    
Preorder(bt->lchild);    
Preorder(bt->rchild);    
}    
}    
template<class T>  
void BiTree<T>::Inorder(BiNode<T> *bt)       
{    
if(bt==NULL)return;    
else{    
Inorder(bt->lchild);    
cout<<bt->data<<" ";    
Inorder(bt->rchild);    
}    
}    
template<class T>   
void BiTree<T>::Postorder(BiNode<T> *bt)      
{    
if(bt==NULL)return;    
else     
{    
Postorder(bt->lchild);    
Postorder(bt->rchild);    
cout<<bt->data<<" ";    
}    
}    
template<class T>  
void BiTree<T>::Print(BiNode<T> *bt)    
{    
if(bt)    
{    
   if(bt->lchild)    
   {    
   cout<<bt->data<<"有左孩子"<<bt->lchild->data<<"\t";    
   }    
   else {cout<<bt->data<<"无左孩子"<<"\t";}    
if(bt->rchild)    
 {    
cout<<bt->data<<"有右孩子"<<bt->rchild->data<<"\t";}    
else {cout<<bt->data<<"无右孩子"<<"\t";}    
if(bt->parent==NULL)cout<<"该结点为根结点,无双亲\n";    
else cout<<bt->data<<"的双亲为"<<bt->parent->data<<endl;    
}    
else return;    
Print(bt->lchild);        
Print(bt->rchild);          
}    
template<class T>    
void BiTree<T>::Creatparent(BiNode<T> *bt)       
{    
if(bt)    
{if(bt->lchild)    
{bt->lchild->parent=bt;}    
if(bt->rchild)    
{bt->rchild->parent=bt;}    
}    
else return;    
Creatparent(bt->lchild);    
Creatparent(bt->rchild);    
}    
template<class T>    
void BiTree<T>::Getleaf(BiNode<T> *bt)    
{    
if(bt)    
{    
if(bt->lchild==NULL&&bt->rchild==NULL)    
cout<<bt->data<<"\t";    
Getleaf(bt->lchild);          
Getleaf(bt->rchild);           
}      
}    
    
int main()             
{    
cout<<"输入结点信息 :"<<endl;      
BiTree<char> t;    
cout<<"递归前序遍历输出 :"<<endl;    
t.Preorder();    
cout<<endl;    
cout<<"递归中序遍历输出 :"<<endl;    
t.Inorder();    
cout<<endl;    
cout<<"递归后序遍历输出 :"<<endl;    
t.Postorder();    
cout<<endl;    
t.Creatparent();    
t.Print();            
cout<<"叶子结点为: ";    
t.Getleaf();    
return 0;    
} 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值