实验 五:树和二叉树的实验

#include<iostream.h>
struct BiNode
{
 char data; 
 BiNode *lchild,*rchild;
};
class BiTree
{
 BiNode *root;
 BiNode *Creat(BiNode *bt);
 void Release(BiNode *bt);
 void PreOrder(BiNode *bt);
 void InOrder(BiNode *bt);  
 void PostOrder(BiNode *bt);  
 void Print(BiNode *bt,BiNode *pr);
 void BiTree::Printleaf(BiNode *bt);
public:
 BiTree(){root=Creat(root);}
 ~BiTree(){Release(root);}  
 void PreOrder(){PreOrder(root);} 
 void InOrder(){InOrder(root);} 
 void PostOrder(){PostOrder(root);}      
    void Print(){Print(root,NULL);} 
    void Printleaf(){Printleaf(root);} 
};
BiNode *BiTree::Creat(BiNode *bt)
{
 char ch;
 cin>>ch;
 if(ch=='#')  bt=NULL;
 else 
 {
  bt=new BiNode;
  bt->data=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<<" "; 
  InOrder(bt->lchild);     
  InOrder(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 BiTree::Print(BiNode *bt,BiNode *pr) 

    if(bt==NULL)return;
    { 
        cout<<"结点"<<bt->data<<"    ";  
        if(bt->lchild!=NULL)
            cout<<"左孩子:"<<bt->lchild->data<<"    ";    
        else   
            cout<<"无左孩子"<<"       ";   
        if(bt->rchild!=NULL)   
            cout<<"右孩子:"<<bt->rchild->data<<"    ";
        else   
            cout<<"无右孩子"<<"       ";   
        if(pr!=NULL)   
            cout<<"双亲:"<<pr->data<<"    ";
        else   
            cout<<"无双亲"<<"        ";   
        cout<<endl;   
        Print(bt->lchild,bt);   
        Print(bt->rchild,bt);   
    }   
}
void BiTree::Printleaf(BiNode *bt)  

    if(bt!=NULL)    
    {      
        if(bt->lchild==NULL&&bt->rchild==NULL)
            cout<<bt->data<<"  "; 
        Printleaf(bt->lchild); 
        Printleaf(bt->rchild); 
    }   
}   
int main()
{
 cout<<"二叉树及实现其相关操作:"<<endl;
 BiTree T;       
 cout<<"-------前序遍历-------"<<endl;
 T.PreOrder();
 cout<<endl;
 cout<<"-------中序遍历-------"<<endl;
 T.InOrder();
 cout<<endl;
 cout<<"-------后序遍历-------"<<endl;
 T.PostOrder();
 cout<<endl;
 cout<<"各结点的双亲和孩子信息:"<<endl; 
    T.Print(); 
    cout<<endl; 
    cout<<"叶子结点信息:"; 
    T.Printleaf(); 
    cout<<endl; 
 return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值