【数据结构】二叉树的概述

简介: 二叉树的概述

5. 树与二叉树


  • 树形结构是一种非常重要的==非线性结构==,树形结构中数据元素之间具有==一对多==的逻辑关系。

5.1 数的基本概念


5.1.1 树的定义


树是由n(n>=0)个结点所构成的有限集合

  • 当n=0时,称为空树
  • 当n>0时,n个结点满足以下条件
  • 有且仅有一个称为根的结点
  • 其余结点可分为m个互不相交的有限集合,且每一个集合又构成一棵树,该树称为根节点的子树。
  • 对于一颗非空树,其中有且仅有一个没有前驱的结点,这个结点就是==根节点==,其余结点有且仅有一个前驱,但可以有多个后继。

A

A

B

C

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

树的表示法:树形表示法、文氏图表示法、凹入图表示法和广义表(括号)表示法

  • 树形表示法
  • 文氏图表示法

image.png

image.png

5.1.2 树的常用术语


image.png

image.png

5.2 二叉树的概述


5.2.1 基本概念


  • 二叉树是一个特殊的树,每个结点最多只有两棵子树,且两棵子树也是二叉树。
  • 精确定义:二叉树是由n(n>=0)个结点所构成的有限集合。当n=0时,这个集合为空,此时二叉树为空树,当n>0时,这个集合是由一个根结点和两个互不相交的分别称为左子树和右子树的二叉树构成。
  • 二叉树的两棵子树有左右之分,所以二叉树是有序树

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

image.png

  • 二叉树的5种基本形态:空树、只有根结点、只有左子树、只有右子树、既有左子树又有右子树

/

X

X

X

/

X

/

X

X

X

X

5.2.2 满二叉树定义


  • 满二叉树是二叉树的一种特殊情况。
  • 如果在一棵二叉树中,它的所有结点或者叶结点,或者是左、右子树都非空,并且所有叶结点都在同一层上,则称这棵二叉树为满二叉树。

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

5.2.3 完全二叉树定义


  • 如果在一棵具有n个结点的二叉树中,它的逻辑结构与满二叉树的前n个结点的逻辑结构相同,则称这样的二叉树为完全二叉树。

A

B

C

D

E

F

G

H

I

J

K

5.2.4 单分支树的定义


image.png

image.png

5.2.5 二叉树的特性


1)特性1:i层最多结点数 2^i

  • 二叉树中第i(i>=0)层上的结点数最多为2^i
  • 3)特性3:叶子结点关系 n_0 = n_2 + 1
  • 对于任意一颗二叉树,若其叶结点的个数为n_0,度为2的结点个数为n_2,则有n_0=n_2+1

image.png

image.png

证明


4)特性4:深度 ⌊log2n⌋ + 1

具有n个结点的完全二叉树的深度为⌊log2n⌋ + 1 或 ⌊log2(n+1)⌋

数学常识

向下取整的运算称为Floor,用数学符号⌊ ⌋表示;向上取整的运算称为Ceiling,用数学符号⌈ ⌉表示

例如: ⌊59/60⌋=0 ⌈59/60⌉=1 ⌊-59/60⌋=-1 ⌈-59/60⌉=0

image.png

5)特性5:判断是否

  • 若对含n个结点的完全二叉树从上到下且从左至右进行0至n-1的编号,则对完全二叉树中任意一个编号为1的结点有:
  1. 若i=0,则该结点是二叉树的根,无双亲,否则编号为(i-1)/2的结点为其双亲结点。若2i+1>=n,则该结点无左孩子,否则,编号为2i+1的结点为其左孩子结点
  2. 如果2i+2>=n,则该结点无右孩子结点,否则,编号为2i+2的结点为其右孩子结点。

0

1

2

3

4

5

6

7

8

9

10

5.2.6 存储结构


1)顺序存储结构

  • 完全二叉树存储:

用一组地址连续的存储单元从根结点开始依次自上而下,并按层次从左到右存储完全二叉树上的各节点元素,即将完全二叉树编号为i的结点元素存储在下标为i数组元素中。

image.png

非完全二叉树:

先在树中增加一些并不存在的虚结点并使其成为一棵完全二叉树,然后用与完全二叉树相同的方法对结点进行编号,再将编号为i的结点的值存放到数组下标为i的数组单元中,虚结点不存放任何值。

image.png

  • 顺序存储适用于满二叉树和完全二叉树。
  • 对于非完全二叉树来说,一个深度为h的树,需要的存储单元为2^h-1,会造成空间的浪费,如:对于右支树来说,只需要h个存储单元,但是存储的时候却要使用2^h-1个空间。

2)链式存储结构

  • 二叉树的链式存储:将二叉树的各个结点随机的存放在位置任意的内存空间中,各个结点之间的逻辑关系通过指针来反映。
  • 链式存储有2种方式:二叉链表存储结构、三叉链表存储结构
  • 二叉链表存储结构有3个域:数据域data、左孩子域lchild、右孩子域rchild

image.png

三叉链表存储结构有4个域:数据域data、左孩子域lchild、右孩子域rchild、父节点域parent

image.png

image.png

image.png

二叉链式存储结构是二叉树最常用的存储结构。

 
         
相关文章
|
13天前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
2月前
|
机器学习/深度学习 存储 算法
数据结构实验之二叉树实验基础
本实验旨在掌握二叉树的基本特性和遍历算法,包括先序、中序、后序的递归与非递归遍历方法。通过编程实践,加深对二叉树结构的理解,学习如何计算二叉树的深度、叶子节点数等属性。实验内容涉及创建二叉树、实现各种遍历算法及求解特定节点数量。
104 4
|
2月前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
151 8
|
3月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
35 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
3月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
41 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
3月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
36 1
|
3月前
|
算法 Java C语言
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
31 1
|
3月前
|
存储
【数据结构】二叉树链式结构——感受递归的暴力美学
【数据结构】二叉树链式结构——感受递归的暴力美学
|
3月前
|
存储 算法
探索数据结构:分支的世界之二叉树与堆
探索数据结构:分支的世界之二叉树与堆
|
3月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
38 0