二叉树的先中后序遍历

什么是遍历呢?

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

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

二叉树的递归特性:

①要么是个空二叉树

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

先序遍历:根左右(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;
    }
}
相关推荐
深圳满意度咨询1 小时前
医院满意度数字化测评系统:从数据采集到智能决策的技术实践
算法
xiangyun612 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun612 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
OKkankan3 小时前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
蓝速科技3 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
302wanger3 小时前
推荐下我的两个AI信息源
算法
索尔~古德曼4 小时前
CF——错题的集合
算法
xxwxx__4 小时前
C++ AVL 树深度剖析:平衡二叉搜索树原理、源码与面试考点
数据结构·c++
SL_staff4 小时前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈
Logic1014 小时前
C语言/数据结构数组题解:数字列表加一(Plus One)——进位处理与数组扩展
c语言·数据结构·模拟·数组·时间复杂度·算法题·进位