二叉树的先中后序遍历

什么是遍历呢?

遍历:按照某种次序把所有结点都访问一遍

先/中/后序遍历:基于树的递归特性确定的次序规则

二叉树的递归特性:

①要么是个空二叉树

②要么就是由"根节点+左子树+右子树"组成的二叉树

先序遍历:根左右(NLR) ------先访问根结点,在访问左子树,最后访问右子树

中序遍历:左根右(LNR) ------先访问左子树,在访问根结点,左后放稳右子树

后序遍历:左右根(LRN) ------先访问左子树,在访问右子树,最后访问根节点

例如:

先序遍历:AB DECFG

中序遍历:DB EAFC G

后序遍历:DEBFGCA

EX1:

1.先序遍历代码实现:

先序遍历(PreOrder)的操作过程如下:

1.若二叉树为空,则什么也不做;

2.若二叉树非空:

①访问根结点;②先序遍历左子树;③先序遍历右子树。

代码实现:

cs 复制代码
typedef struct BiTNode{
ElemType data;
struct BiTNode*lchild,*rchild;
}BiTNode,*BiTree;


//先序遍历
void Pre0rder(BiTree T){
    if(T!=NULL){
       visit(T);          //访问根结点
       Pre0rder(T->lchild);      //递归遍历左子树
       Pre0rder(T->rchild) ;    //递归遍历右子树
    }
}

2.中序遍历代码实现:

中序遍历(lnOrder)的操作过程如下:

1.若二叉树为空,则什么也不做;

2.若二叉树非空:

①先序遍历左子树;②访问根结点;③先序遍历右子树。

cs 复制代码
typedef struct BiTNode{
ElemType data;
struct BiTNode*lchild,*rchild;
}BiTNode,*BiTree;


//中序遍历
void In0rder(BiTree T){
    if(T!=NULL){
       In0rder(T->lchild) ;       //递归遍历左子树
       visit(T);                 //访问根结点
       InOrder(T->rchild) ;      //递归遍历右
    }
}

3.后序遍历:

后序遍历( InOrder)的操作过程如下:

1.若二叉树为空,则什么也不做;

2.若二叉树非空:①先序遍历左子树;②先序遍历右子树;③访问根结点。

4.求树的深度:

cs 复制代码
int treeDepth(BiTree T){
    if (T == NULL){
       return 0;
}
    else {
       int l = treeDepth(T->lchild) ;
       int r = treeDepth(T->rchild);
       //树的深度=Max(左子树深度,右子树深度)+1
       return l>r ? l+1 : r+1;
    }
}
相关推荐
leoufung2 分钟前
LeetCode 64. Minimum Path Sum 动态规划详解
算法·leetcode·动态规划
一起养小猫6 分钟前
LeetCode100天Day7-移动零与搜索插入位置
数据结构·算法·leetcode·指针
ullio7 分钟前
div1+2. 2178E - Flatten or Concatenate
算法
yu_anan11110 分钟前
PPO/GRPO算法在RLHF中的实现
算法
leoufung11 分钟前
Word Break:深度理解 DP 前缀结束点的核心思想
算法·word·动态规划
Aaron158811 分钟前
三种主流接收机架构(超外差、零中频、射频直采)对比及发展趋势浅析
c语言·人工智能·算法·fpga开发·架构·硬件架构·信号处理
草莓熊Lotso1 小时前
Python 进阶核心:字典 / 文件操作 + 上下文管理器实战指南
数据结构·c++·人工智能·经验分享·笔记·git·python
乐迪信息4 小时前
乐迪信息:目标检测算法+AI摄像机:煤矿全场景识别方案
人工智能·物联网·算法·目标检测·目标跟踪·语音识别
前端小L9 小时前
贪心算法专题(十):维度权衡的艺术——「根据身高重建队列」
javascript·算法·贪心算法
方得一笔9 小时前
自定义常用的字符串函数(strlen,strcpy,strcmp,strcat)
算法