数据结构与算法4:二叉树

1. 什么是树?

树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:
(1)有且仅有一个特定的称为根(root)的结点。
(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)

在这里插入图片描述

2. 树的构成

2.1 节点

  • 分类
节点分类特点说明
根(root)没有父节点只有子节点的节点
叶子(leaf)/终端节点没有子节点或者子节点是空的节点叶子结点度为0
分支节点/非终端节点分支节点包含根节点
  • 关系
    • 双亲节点或父节点(Parent):若一个节点含有子节点,则这个节点称为其子节点的父节点。
    • 孩子节点或子节点(Child):一个节点含有的子树的根节点称为该节点的子节点。
    • 兄弟节点(Sibling):具有相同父节点的节点互称为兄弟节点。
    • 节点的祖先:从根到该节点所经分支上的所有节点;
    • 节点的子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

在这里插入图片描述
在这里插入图片描述

1.2 度

  • 节点的度数:节点孩子的个数
  • 树的度:树中节点的度最大值。

1.3 层次

  • 层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.4 深度与高度

  • 维基百科

节点的高度:节点到最远叶子节点的最长路径上边的数量。叶子节点高度为0。
节点的深度:节点到根节点的路径上边的数量。所有根节点深度为0。
树的高度:树的高度等于根节点的高度,等于最远叶子节点的深度。
树的深度:树的深度等于树的高度。
树的宽度:两个最长路径的叶子节点之间节点数。
在这里插入图片描述

Leetcode

  • 树的深度:根节点到最远叶子节点之间最长路径上节点的数量。
  • 树的高度:根节点和最远叶子节点之间最长路径上边的数量。
    树的深度与树的高度是树中节点的最大层次
  1. 二叉树的最小深度
  2. 二叉树的最大深度
  3. N叉树的最大深度

3. 树的分类

树按照子节点的数量分为二叉树和多叉树。

  • 二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),每个节点最多有2个子节点,分别称为根结点的左子树和右子树。
  • 多叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空树)。每个节点有多个子节点。
    在这里插入图片描述
    在这里插入图片描述
No.分类经典分类
1二叉树平衡二叉树、二叉搜索树、AVL、堆、红黑树
2多叉树2-3树、B树、B+树

树按照子树是否有序分为有序树和无序树。

  • 有序树:节点各子树从左到右有次序(不能互换)。
  • 无序树:节点各子树从左到右无次序(能互换)。

二叉树是最简单,最基础的树结构。

4. 特殊的树

  • 满二叉树(Full Binary Tree):二叉树中的每个结点恰好有两个孩子结点且所有叶子结点都在同一层。
    在这里插入图片描述

  • 完全二叉树(Complete Binary Tree): 每层结点都完全填满,在最后一层上如果不是满的,则只缺少右边的若干结点。

深度为k,有 n 个结点的二叉树,当且仅当其每一个结点都与深度为的满二叉树中编号从到的结点一一对应,该二叉树称为完全二叉树。在这里插入图片描述

不同的书籍对满二叉树和完全二叉树定义不一样。
《算法导论》第3版

  • 满二叉树:每个节点是叶节点或者度为2.
  • 完全二叉树:所有叶节点深度相同,且所有内部节点度为2. (树的节点总数达到最大)

5. 二叉树的性质

5.1 通用性质

  1. 在非空二叉树上,第层至多有个结点。
  2. 深度为的二叉树至多有个结点;
  3. 对任何一个二叉树,若其叶子结点数为,度为的节点数为,则;

5.2 满二叉树的性质

深度为的满二叉树且有个结点。

5.3 完全二叉树的性质

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值