二叉树的前序,中序,后序,遍历

本文介绍了如何使用数组表示二叉树,以及前序、中序和后序遍历的定义和C++代码实现,强调了数组表示法适用于二叉树的特性。
摘要由CSDN通过智能技术生成

申明

再次申明这个专栏只是分享博主学习图论时的顺序,给新手提供一个入门的好方法(博主现在也是新手),具体算法逻辑需要自己学习,因此有错误可以私信或者直接在评论区骂。

前言

首先 一棵二叉树由根结点、左子树和右子树三部分组

前序遍历(根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 )

中序遍历(根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面)

后序遍历(根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面)

在刚学数据结构的时候我们学会了如何用指针存储树,在这里本蒟蒻博主写的是数组表示树的存储,和指针存储类似,重点记住这种方式只能用于二叉树!!!

题目链接

B3642 二叉树的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
using namespace std;
const int N=1e6+10;
struct tree
{
    int left,right;
}q[N];
int n;

void qian(int x)             //不要问我为什么用中文,问就是不会English
{
    if(x==0) return;
    printf("%d ",x);
    qian(q[x].left);
    qian(q[x].right);
}

void zhong(int x)
{
    if(x==0) return;
    zhong(q[x].left);
    printf("%d ",x);
    zhong(q[x].right);
}

void hou(int x)
{
    if(x==0) return;
    hou(q[x].left);
    hou(q[x].right);
    printf("%d ",x);
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)             //存二叉树
    {
        int l,r;
        scanf("%d %d",&l,&r);
        q[i].left=l,q[i].right=r;
    }
    qian(1);
    printf("\n");
    zhong(1);
    printf("\n");
    hou(1);
    return 0;
}

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值