二叉树及二叉树遍历的基础解读

简介: 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点 。

前言


二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。

二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点 。


2、二叉树定义


二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。


3、二叉树的五种基本形态


1、空二叉树——如图1(a) ;

2、只有一个根结点的二叉树——如图1(b);

3、只有左子树——如图1(c) ;

4、只有右子树——如图1(d) ;

5、完全二叉树

eacc140e7b1b96edf6b5369ac7ff7b5.png

满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树


4、相关术语


①结点:包含一个数据元素及若干指向子树分支的信息。

②结点的度:一个结点拥有子树的数目称为结点的度。

③叶子结点:也称为终端结点,没有子树的结点或者度为零的结点。

④分支结点:也称为非终端结点,度不为零的结点称为非终端结点。

⑤树的度:树中所有结点的度的最大值。

⑥结点的层次:从根结点开始,假设根结点为第1层,根结点的子节点为第2层,依此类推,如果某一个结点位于第L层,则其子节点位于第L+1层。

⑦树的深度:也称为树的高度,树中所有结点的层次最大值称为树的深度。

⑧有序树:如果树中各棵子树的次序是有先后次序,则称该树为有序树。

⑨无序树:如果树中各棵子树的次序没有先后次序,则称该树为无序树。

⑩森林:由m(m≥0)棵互不相交的树构成一片森林。如果把一棵非空的树的根结点删除,则该树就变成了一片森林,森林中的树由原来根结点的各棵子树构成。


5、二叉树性质


性质1:二叉树的第i层上至多有2i-1(i≥1)个节点。

性质2:深度为h的二叉树中至多含有2h-1个节点。

性质3:若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1。

性质4:具有n个节点的完全二叉树深为log2x+1(其中x表示不大于n的最大整数)。

性质5:若对一棵有n个节点的完全二叉树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点:

当i=1时,该节点为根,它无双亲节点。

当i>1时,该节点的双亲节点的编号为i/2。

若2i≤n,则有编号为2i的左节点,否则没有左节点。

若2i+1≤n,则有编号为2i+1的右节点,否则没有右节点。


6、二叉树遍历

一棵二叉树由根结点、左子树和右子树三部分组成,若规定 D、L、R 分别代表遍历根结点、遍历左子树、遍历右子树,则二叉树的遍历方式有 6 种:DLR、DRL、LDR、LRD、RDL、RLD。由于先遍历左子树和先遍历右子树在算法设计上没有本质区别,所以,只讨论三种方式:


6.1、DLR–前序遍历(根左右)

根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 。


6.2、LDR–中序遍历(左根右)

根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面。


6.3、 LRD–后序遍历(左右根)

根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面。


前序遍历(DLR):

5272e9058ebb46c3805b7c8e897505c1.png

中序遍历(LDR):

92ef194e73c4433dbd9d1ccfb8d5f9de.png

后序遍历(LRD):

c928f2692b714de49b054e2164b99be7.png


* 中序投影法

计算中序遍历拥有比较简单直观的投影法,如图


55f147a7ab3746df9e6f1c8cd72a06ae.png

7、层序遍历

除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。


8、实例:

二叉树的先序遍历是:ABDEGCFH 中序遍历是:DBGEACHF,请写出这个二叉树的后序遍历结果。


答:

方法一、先序+中序遍历还原二叉树,文字解读:


1)首先从先序得到第一个为A,就是二叉树的根,回到中序,可以将其分为三部分:

左子树的中序序列DBGE,根A,右子树的中序序列CHF。

2)接着将左子树的序列回到先序可以得到B为根,这样回到左子树的中序再次将左子树分割为三部分:

左子树的左子树D,左子树的根B,左子树的右子树GE

3)同样地,可以得到右子树的根为C

类似地将右子树分割为根C,右子树的右子树HF,注意其左子树为空

如果只有一个就是叶子不用再进行了,刚才的GE和HF再次这样运作,就可以将二叉树还原了。


方法二:中序投影法

前序(根左右):A B D E G C F H


dbf06c5786eb4e2e8e9e5eb6b0e33281.png

**结果:**后序(左右根):D G E B H FCA

思路:

先用中序投影法,将结点投影到一条线上。然后利用二叉树原理,根据前序排列绘制出二叉树的结果。


参考:

1、二叉树-百科

2、二叉树遍历-百科

3、二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解


大神精论:

1、深入学习二叉树(一) 二叉树基础


相关文章
|
机器学习/深度学习 运维 安全
图神经网络在欺诈检测与蛋白质功能预测中的应用概述
金融交易网络与蛋白质结构的共同特点是它们无法通过简单的欧几里得空间模型来准确描述,而是需要复杂的图结构来捕捉实体间的交互模式。传统深度学习方法在处理这类数据时效果不佳,图神经网络(GNNs)因此成为解决此类问题的关键技术。GNNs通过消息传递机制,能有效提取图结构中的深层特征,适用于欺诈检测和蛋白质功能预测等复杂网络建模任务。
464 2
图神经网络在欺诈检测与蛋白质功能预测中的应用概述
QT项目实战(视频播放器)
QT项目实战(视频播放器)
641 0
|
安全 5G 网络性能优化
无线接口 | 带你读《5G 无线系统设计与国际标准》之五
本节对物理层、数据链路层和网络层基本功能相关内容进行一些讨论。
无线接口  | 带你读《5G 无线系统设计与国际标准》之五
|
安全 Java 关系型数据库
基于JSP的人才公寓管理系统
基于JSP的人才公寓管理系统
|
4天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
13天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
541 206
|
3天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
220 138
下一篇
oss云网关配置