二叉树的先中后序遍历

什么是遍历呢?

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

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

二叉树的递归特性:

①要么是个空二叉树

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

先序遍历:根左右(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;
    }
}
相关推荐
稚南城才子,乌衣巷风流20 分钟前
支配树(Dominator Tree)详解:概念、算法与应用
算法
稚南城才子,乌衣巷风流1 小时前
动态开点:原理、实现与应用场景
数据结构·算法
yyds_yyd_100861 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
KaMeidebaby2 小时前
卡梅德生物技术快报 | 核酸适配体文库测序:核酸适配体文库测序的技术原理、实验流程与数据解析
前端·网络·数据库·人工智能·算法
geovindu3 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
ekkoalex4 小时前
训练框架以及算法实现的框架
算法
DFT计算杂谈4 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
玖玥拾4 小时前
LeetCode 26 删除有序数组中的重复项
算法·leetcode
Kina_C4 小时前
LVS负载均衡的十二种核心调度算法
linux·运维·算法·负载均衡·lvs
吞下星星的少年·-·5 小时前
牛客技能树:小红走矩阵(dp入门)
算法·dp