二叉树的遍历

遍历的定义:

指按某种搜索路径遍历每个结点且不重复(又称周游)

遍历的用途:

它是树结构插入,删除,修改,查找和排列运算的前提,是二叉树的一切运算的基础和核心。

遍历的实质:

将非线性结构线性化。

二叉树的遍历可分为三种。

1.先序遍历。
2.中序遍历。
3.后序遍历

1).先序遍历

若二叉树为空,则空操作;
否则:

  • 先访问根结点(D)
  • 先序遍历左子树(L)
  • 先序遍历右子树(R)
void DLR(BiTree T){
if(T){
printf(T->data);
DLR(T->lchild);
DLR(T->rchild);
 }
}
2).中序遍历

若二叉树为空,则空操作;
否则:

  • 中序遍历左子树(L)
  • 访问根节点(D)
  • 中序遍历右子树(R)
void LDR (BiTree T){
if(T){
LDR(T->lchild);
printf(T->data);
LDR(T->rchild);
  }
}
3).后序遍历

若二叉树为空,则空操作;
否则:

  • 后序遍历左子树(L)
  • 后序遍历右子树(R)
  • 访问根节点(D)
void LRD(BiTree T){
if(T){
LRD(T->lchild);
LRD(T->rchild);
printf(T->data);
}
}

遍历实验相关代码:


#include<stdio.h>
#include<stdlib.h>
#define MAX 9
using namespace std;
typedef struct node
{
    char data;
    struct node *lchild;
    struct node *rchild;
}BiTNode,*BiTree;
typedef struct BiTNode_s
{
    char data;
    int lchild;
    int rchild;
}BiTNode_s,*BiTree_s;
int i=1;

void PreCreatBiTree(BiTree&T)
{
    char ch;
    if((ch=getchar())=='*')
        T=NULL;
    else
    {
        T=(BiTNode *)malloc(sizeof(BiTNode));
        T->data=ch;
        PreCreatBiTree(T->lchild);
        PreCreatBiTree(T->rchild);
    }
}
 
 
///前序遍历,中左右
void PreTravel(BiTree &T)
{
    if(T)
    {
        printf("%c ",T->data); 
        PreTravel(T->lchild);
        PreTravel(T->rchild);
    }
}
///中序遍历,左中右
void MidTravel(BiTree&T)
{
    if(T)
    {
        MidTravel(T->lchild);
        printf("%c ",T->data);
        MidTravel(T->rchild);
    }
}
///后序遍历,左右中
void AftTravel(BiTree &T)
{
    if(T)
    {
        AftTravel(T->lchild);
        AftTravel(T->rchild);
        printf("%c ",T->data);
    }
}
 

 
int main()
{
    int j;
    BiTree T;
    BiTNode_s a[MAX];
    printf("请按先序遍历顺序输入二叉树的各节点,没有的用符号*代替:\n");
    PreCreatBiTree(T);
    printf("前序遍历结果:\n");
    PreTravel(T);
    printf("\n");
    printf("中序遍历结果:\n");
    MidTravel(T);
    printf("\n");
    printf("后序遍历结果:\n");
    AftTravel(T);
    printf("\n");
  
    return 0;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值