二叉树的先中后序遍历

什么是遍历呢?

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

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

二叉树的递归特性:

①要么是个空二叉树

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

先序遍历:根左右(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;
    }
}
相关推荐
源代码•宸12 分钟前
Golang语法进阶(协程池、反射)
开发语言·经验分享·后端·算法·golang·反射·协程池
一叶知秋061 小时前
数据结构-什么是队列?
数据结构·队列
Jasmine_llq2 小时前
《CF280C Game on Tree》
数据结构·算法·邻接表·深度优先搜索(dfs)·树的遍历 + 线性累加统计
小棠师姐2 小时前
支持向量机(SVM)入门:超平面与核函数的通俗解释
算法·python机器学习·支持向量机svm·超平面可视化·核函数应用
zhongvv2 小时前
对单片机C语言指针的一些理解
c语言·数据结构·单片机·指针·汇编语言
im_AMBER2 小时前
Leetcode 102 反转链表
数据结构·c++·学习·算法·leetcode·链表
今儿敲了吗3 小时前
01|多项式输出
c++·笔记·算法
Xの哲學3 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
AlenTech3 小时前
200. 岛屿数量 - 力扣(LeetCode)
算法·leetcode·职场和发展
C雨后彩虹3 小时前
竖直四子棋
java·数据结构·算法·华为·面试