码迷,mamicode.com
首页 > 其他好文 > 详细

3.4之二叉树详解

时间:2019-03-04 09:17:23      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:namespace   返回   tree   说明   str   main   中序遍历   iostream   space   

#include<iostream>

using namespace std;

 

 

typedef struct node

{

    struct node *lchild;             //创建二叉树,分别表示左右两个节点

    struct node *rchild;

    char data;

}BiTreeNode, *BiTree;

 

void createBiTree(BiTree &T)

{ char c;

    cin >> c;

    if(‘#‘ == c)           

        T = NULL;            //‘’#‘’表示二叉树不存在的节点

    else

    {

        T = new BiTreeNode;

        T->data=c;

        createBiTree(T->lchild);

        createBiTree(T->rchild);         //输入的值分别赋值给左右两个节点(递归创建左右子树)

    }

}

 

 

void preTraverse(BiTree T)

{

    if(T)

    {

        cout<<T->data<<" ";                    //前序遍历,因为前面创建时候说明‘#’为空,所以先从首个结点判断,显示数值,依次判断左右子树,两边判断完回到结点并记录,若有子树则向下继续判断。

        preTraverse(T->lchild);                 若无子树,则返回上一层。直到所有结点遍历一遍结束。

        preTraverse(T->rchild);

    }

}

 

void midTraverse(BiTree T)

{

    if(T)

    {

        midTraverse(T->lchild);            //中序遍历:先在节点向左子树判断,有则继续向下,若无则返回,并记录数值。回到上一层结点记录数值,再判断右子树,直至所有结点遍历一遍结束

        cout<<T->data<<" ";

        midTraverse(T->rchild);

    }

}

 

void postTraverse(BiTree T)

{

    if(T)

    {

        postTraverse(T->lchild);            //后序遍历:先在节点向左子树判断,有则继续向下,若无则返回,向右继续判断。无右子树则继续返回上一层,重复遍历,直到遍历至首结点结束

        postTraverse(T->rchild);

        cout<<T->data<<" ";

    }

}

int main()

{

    BiTree T;                           

    createBiTree(T);

    cout<<"二叉树创建完成!"<<endl;

    cout<<"前序遍历二叉树:"<<endl;

    preTraverse(T);

    cout<<endl;

    cout<<"中序遍历二叉树:"<<endl;

    midTraverse(T);

    cout<<endl;

    cout<<"后序遍历二叉树:"<<endl;

    postTraverse(T);

    return 0;

}

3.4之二叉树详解

标签:namespace   返回   tree   说明   str   main   中序遍历   iostream   space   

原文地址:https://www.cnblogs.com/katycat/p/10468658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!