树与二叉树

本文详细介绍了树和二叉树的数据结构,包括它们的定义、特点、专业术语以及各种类型的特性。树是一种层次结构,其中每个节点可以有零个或多个子节点,而二叉树是每个节点最多有两个子节点的特殊树形结构。二叉树分为满二叉树、完全二叉树和真二叉树,每种都有其特定的性质。此外,还讨论了二叉查找树的概念及其在数据查找中的应用。通过理解这些基础知识,有助于深入掌握计算机科学中的数据组织和算法设计。
摘要由CSDN通过智能技术生成

一、树

1. 定义

是一种 数据结构 是由 n(n≥1) 个有限节点组成一个具有层次关系的 集合 。把它叫做“树”是因为它看起来像是一颗倒挂的树,也就是说它的根朝上,而叶子朝下。

树是N个节点的有限集(n≥0)。当N=0时,称为空树。在任意一个非空树中,有如下的特点:

  • 每个节点有零个或多个子节点;
  • 没有父节点的节点称之为根节点;
  • 一颗树形结构中,有且仅有一个根节点;
  • 每一个非根节点有且只有一个父节点;
    除了根节点外,每个子节点可以分为多个不相交的子树。
    1
    如上图,许多逻辑可能存在着一对多或者多对多的情况。四川省包含了很多个城市,每个城市又包含了很多个区县。

如下图所示:根、子树、叶子节点组成的树形结构:
2
树的专业术语,如下图:
3
如上图所示,节点1的上一级节点,被称为1的父节点。从节点1衍生出来的节点被称为1的孩子节点。和节点1同级别的节点被称为1的兄弟节点。树的最大层级数,被称为树的高度。上面图上的树,高度为4。


2. 关键字

  • 节点:二叉树中每个元素都称为节点

根节点、父节点、子节点、兄弟节点

  • 空树:一棵树可以没有任何的节点

一棵树也可以只有一个节点,也就是只有根节点

  • 子树:左子树、右子树

节点下方左面的是左子树、右面的是右子树

  • :节点所拥有的子树的数目称为该节点的度
  1. 度 = 节点的总数 - 1
  2. 叶子节点的度为0
  • 节点的度:子树的个数
  • 树的度:所有节点度中的最大值
  • 叶子节点:度为0的节点
  • 非叶子节点:度不为0的节点
  • 层数:根节点在第1层,根节点的子节点在第2层,以此类推
  • 节点的深度:从根节点到当前节点的唯一路径上的节点总数
  • 节点的高度:从当前节点到最远叶子节点的路径上的节点总数
  • 树的深度:所有节点深度中的最大值
  • 树的高度:所有节点高度中的最大值

树的深度 = 树的高度

  • 有序树:树中任意节点的子节点之间有顺序关系
  • 无序树:树中任意节点的子节点之间没有顺序关系

二、二叉树

1. 定义

是树形结构中的一种特殊形式。此树形结构中,每个节点最多有两个节点,也可能是没有节点或者一个子节,但不能超过两个子节点
在这里插入图片描述

左面的被称为左孩子,右面的被称为右孩子


2. 特点

  • 每个节点的度最大为2(最多可以拥有两颗子树)
  • 左子树和右子树是有顺序的
  • 即使
  • 某节点只有一颗子树,也要区分左右子树

3. 性质

  • 非空二叉树的第 i 层,最多有 2 ^ [i - 1]个节点(i ≥ 1)
  • 在高度为h的二叉树上最多有2 ^ [h - 1[个节点(h ≥ 1)
  • 对于任何一个非空二叉树,如果叶子节点个数为n0,度为2的节点个数为n2,则有:n0 = n2 + 1
  • 假设有度为1的节点个数为n1,那么二叉树的节点总数n = n0 + n1 + n2
  • 二叉树的边数 T = n1 + 2 * n2 = n - 1 = n0 + n2 - 1
  • 因此n0 = n2 + 1

4. 类型

  • 真二叉树
    概念:所有节点的度要么都为0,要么为2
    在这里插入图片描述
  • 满二叉树
    概念:最后一层节点的度都为0,其他节点的度都为2
    在这里插入图片描述
    性质:
  • 假设满二叉树的高度为h(h≥1),那么有:
  1. 第 i 层的节点数量:2 ^ [i - 1];
  2. 叶子节点数量:2 ^ [h - 1];
  3. 总节点数量n,则n = 2 ^ [h - 1] = 2 ^ [0] + 2^ [1] + 2 ^ [2] + … + 2 ^ [h - 1];
  4. h = log_2 n + 1
- 同样高度的二叉树中,满二叉树的叶子节点数量最多,总节点数量最多
- 满二叉树一定是真二叉树,真二叉树不一定是满二叉树
  • 完全二叉树
    概念:叶子节点只会出现最后 2 层,且最后 1 层的叶子结点都靠左对齐
    在这里插入图片描述

完全二叉树与满二叉树是很相似的,所以也可以这么定义,完全二叉树:对节点从上至下、左至右开始编号,其所有编号都能与相同高度的满二叉树中的编号对应

  • 完全二叉树从根节点至倒数第二层是一颗满二叉树
  • 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树
  1. 性质:
  • 度为1的节点只有左子树,度为1的节点要么是1个,要么是0个
  • 同样节点数量的二叉树。完全二叉树的高度最小(从上往下,从左往右满排布)
  • 假设完全二叉树的高度为h(h ≥ 1 ),那么有:
  • 至少有 2^{h−1} 个节点, 2^{0} + 2^{1} + 2^{2} + … + 2^{h-2}+ 1
  • 最多有 2^{h}−1 个节点( 满二叉树 ), 2^{0} + 2^{1} + 2^{2} + … + 2^{h-1}
  • 假设总节点数量为n
  • 2{h−1} <= 2^{h}
  • h-1 <= log_2 n < h
  • h = foor (log_2 n) + 1

floor 是向下取整,另外,ceiling 是向上取整
在这里插入图片描述
在这里插入图片描述

  1. 特点:
    完全二叉树 节点总数为n,那么有如下结论:
  • n为奇数时,完全二叉树中没有度为1的节点:我们可以这样看,完全二叉树第一层有一个节点,若想完全二叉树的总结点数是奇数,下面的每一行节点数都必须是偶数。所以,每个节点要么度为0,要么度为2。此时 n = n0 + n2
    img
  • n为偶数时,完全二叉树中只有一个度为1的节点:完全二叉树第一层有一个节点,若想总节点数为偶数,最后一层必须是奇数个节点。那么单独出来的这个节点的双亲,度就为1。而且也只有它一个度为1的节点。 此时 n = n0 + 1 + n2
    img

5. 应用

  • 二叉查找树

在二叉树的基础上增加了以下条件

  1. 如果当前节点的左子树不为空,则左子树上所有的节点的值均小于当前节点的值。
  2. 如果当前节点的右子树不为空,则右子树上的所有节点的值均大于当前节点的值。
  3. 左右子树也都满足上述两个条件。
    如下图
    在这里插入图片描述
    以上图为例,我们要查询 5的节点步骤如下:
  • .访问根节点6,发现5<6,我们要找的5在根节点的左孩子树中。
    在这里插入图片描述
  • 访问根节点的左孩子4,发现5>4,我们要找的5在节点4的右孩子中。
    在这里插入图片描述
  • 访问节点4的右孩子,发现5=5,这就是我们要找的节点5。
    在这里插入图片描述
      在二叉查找树中,左子树小于父节点,右子树大于父节点,因此保证了二叉树的顺序。所以二叉查找树又被称为二叉排序树。
  • 顺序存储

在新增数据的时候,仍要遵循二叉查找树的基本原则。
下图是准备好的一颗二叉排序树:
在这里插入图片描述

  1. 假设现在要将 10存入上图的二叉树中,由于10>6,走右边,10>7,继续走右边,10>8继续走右边。所以10会插入到8的右孩子位置,如下图:
    在这里插入图片描述
  2. 假设现在继续将9插入树中,由于9>6,9>7,9>8,且9<10,所以9应该在6/7/8的右边且在10的左边,如下图:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值