递归法创建二叉树

1.内容简介

  • 先序法创建新二叉树
  • 先序、中序、后序遍历二叉树

2.结构体展示

typedef struct tree{
    char data;    /*字符类型data存放该结点的内容*/ 
    struct tree *lchild,*rchild;    /*lchild和rchild为该结点的左右子树*/ 
}Tree;

3.代码思路

  • 先序:根结点->左结点->右结点
  • 中序:左结点->根结点->右结点
  • 后序:左结点->右结点->根结点

4.代码展示

  • 先序法创建新二叉树
void CreatBTree(Tree *&T){    //先序创建二叉树 
    T=new Tree;    
    T->lchild=NULL;
    T->rchild=NULL;
    char data;
    cin>>data;
    if(data=='#'){    /*结束标识符为'#'*/ 
        T=NULL;    
        return;
    }else{
        T->data=data;
    }
    CreatBTree(T->lchild);
    CreatBTree(T->rchild);
}

 

  • 先序遍历二叉树
void PreOrder(Tree *T){    //前序遍历二叉树 
    if(T!=NULL){
        cout<<T->data<<" ";
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}
  • 中序遍历二叉树
void InOrder(Tree *T){    //中序遍历二叉树 
    if(T!=NULL){
        InOrder(T->lchild);
        cout<<T->data<<" ";        
        InOrder(T->rchild);
    }
}

 

  • 后序遍历二叉树
void PostOrder(Tree *T){    //后序遍历二叉树 
    if(T!=NULL){
        PostOrder(T->lchild);    
        PostOrder(T->rchild);
        cout<<T->data<<" ";    
    }
}

 

  • 主函数
int main(){
    Tree *T;
    cout<<"输入先序创建二叉树的序列:"<<endl;
    CreatBTree(T);
    cout<<"先序遍历的结果:"<<endl;
    PreOrder(T);
    cout<<endl;
    cout<<"中序遍历的结果:"<<endl;
    InOrder(T);
    cout<<endl;
    cout<<"后序遍历的结果:"<<endl;
    PostOrder(T);
    cout<<endl;
    
    return 0; 
}

4.运行结果

  • 示范二叉树

  • 运行截图

 

 

posted @ 2019-04-27 22:43  damao_33  阅读(408)  评论(0编辑  收藏  举报