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

二叉树的遍历

时间:2018-02-06 20:11:56      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:floor   struct   char   one   构造   两个指针   mes   优先   结构   

一、二叉树的遍历:

1、前序遍历:根左右

2、中序遍历:左根右

3、后序遍历:左右根

4、层次遍历:一层一层的遍历,类似广度优先

二、二叉树的存储结构

  二叉树以二叉链表结构存储,也就是1个数据域,两个指针域(分别指向左右孩子)

技术分享图片
//二叉树的二叉链表结构定义
typedef char ElemType;
typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
View Code

二叉树的建立,先按照前序遍历的方式建立二叉树,当然也可以按照中序遍历或者后序遍历的方式建立二叉树

技术分享图片
//以前序遍历的方式建立二叉树
void CreateBiTree(BiTree *T)
{
    ElemType ch;
    cin>>ch;
    if(ch==#)
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTNode)malloc(sizeof(BiTNode));
        if(!*T)
        {
            exit(OVERFLOW);//分配内存失败退出
        }
        else
        {
            (*T)->data=ch;//生成结点
            CreateBiTree(&(*T)->lchild);//构造左子树
            CreateBiTree(&(*T)->rchild);//构造右子树
        }
    }

}
View Code

递归前序遍历二叉树

技术分享图片
//递归方式前序遍历二叉树
void PreOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return;
    }
    else
    {
        Display(T->data);
        Floor(T->data,level);//输出了层数
        PreOrderTraverse(T->lchild,level+1);
        PreOrderTraverse(T->rchild,level+1);
    }
}
View Code

递归中序遍历二叉树

技术分享图片
//递归中序遍历
void InOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return;
    }
    else
    {
        InOrderTraverse(T->lchild,level+1);
        Display(T->data);
        Floor(T->data,level);
        InOrderTraverse(T->rchild,level+1);
    }
}
View Code

递归后序遍历二叉树

技术分享图片
//递归后序遍历
void PostOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return;
    }
    else
    {
        PostOrderTraverse(T->lchild,level+1);
        PostOrderTraverse(T->rchild,level+1);
        Display(T->data);
        Floor(T->data,level);
    }
}
View Code

完整代码如下:

技术分享图片
#include<iostream>
#include<stdlib.h>
using namespace std;

typedef char ElemType;

//二叉树的二叉链表结构,也就是二叉树的存储结构,1个数据域,2个指针域(分别指向左右子结点)
typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//以前序遍历的方式建立二叉树
void CreateBiTree(BiTree *T)
{
    ElemType ch;
    cin>>ch;
    if(ch==#)
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTNode)malloc(sizeof(BiTNode));
        if(!*T)
        {
            exit(OVERFLOW);//分配内存失败退出
        }
        else
        {
            (*T)->data=ch;//生成结点
            CreateBiTree(&(*T)->lchild);//构造左子树
            CreateBiTree(&(*T)->rchild);//构造右子树
        }
    }

}

//将二叉树前序遍历输出
void Display(ElemType ch)
{
    cout<<ch<<" ";
}

//在输出的基础上,输出层数
void Floor(ElemType ch,int level)
{
    cout<<ch<<"在第"<<level<<""<<end;
}

//递归方式前序遍历二叉树
void PreOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return;
    }
    else
    {
        Display(T->data);
        Floor(T->data,level);//输出了层数
        PreOrderTraverse(T->lchild,level+1);
        PreOrderTraverse(T->rchild,level+1);
    }
}
//递归中序遍历
void InOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return;
    }
    else
    {
        InOrderTraverse(T->lchild,level+1);
        Display(T->data);
        Floor(T->data,level);
        InOrderTraverse(T->rchild,level+1);
    }
}
//递归后序遍历
void PostOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return;
    }
    else
    {
        PostOrderTraverse(T->lchild,level+1);
        PostOrderTraverse(T->rchild,level+1);
        Display(T->data);
        Floor(T->data,level);
    }
}

int main()
{
    int level=1;//表示层数
    BiTree T=NULL;
    cout<<"请以前序遍历的方式输入二叉树:";//类似输入AB#D##C##
    CreateBiTree(&T);//建立二叉树,没有树,无法遍历

    cout<<"递归前序遍历输出:"<<endl;
    PostOrderTraverse(T,level);
    cout<<end;

    cout<<"递归中序遍历输出为:"<<end;
    InOrderTraverse(T,level);
    cout<<endl;

    cout<<"递归后序遍历输出为:"<<endl;
    PostOrderTraverse(T,level);
    cout<<endl;

    return 0;
}
View Code

 

 

by author:Foreordination

2018-02-06 17:06:22

二叉树的遍历

标签:floor   struct   char   one   构造   两个指针   mes   优先   结构   

原文地址:https://www.cnblogs.com/drq1/p/8423165.html

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