Coursera北大《数据结构基础》之二叉树

本文基于Coursera北大课程《数据结构基础》,所有文中非标注图片均来自课件,侵删

目录

1. 二叉树(binary tree)概念

1.1 二叉树定义

1.2 二叉树的五种形态

1.3 二叉树相关术语

1.4 几种特殊的二叉树

1.4.1 满二叉树

1.4.2 完全二叉树

1.4.3 扩充二叉树

1.4.4 表达式二叉树

1.5 二叉树主要性质

2. 二叉树的抽象数据类型

2.1 深度优先搜索(DFS)

2.1.1 前序遍历(preorder traversal)

2.1.2 中序遍历(inorder traversal)

2.1.3 后序遍历(postorder traversal)

2.1.4 例子

2.2 宽度优先搜索(BFS)

3. 二叉树的存储结构

3.1 一般存储结构

3.2 完全二叉树存储结构

4. 二叉搜索树(Binary Search Tree, BST)

4.1 定义

4.2 二叉搜索树性质

5. 堆与优先队列

5.1 堆的定义(以最小堆为例)

5.2 堆的性质

5.3 对最小堆用筛选法siftdown调整

5.4 最小堆结点的插入和删除

5.4.1 最小堆插入结点

5.4.2 最小堆结点删除

5.5 优先队列

6. Huffman树及其应用

6.1 等长编码

6.2 不等长编码

6.2.1 前缀编码

6.2.2 Huffman编码树与前缀编码

6.3 Huffman编码树建立过程

6.4 Huffman树解码过程

参考资料


 

1. 二叉树(binary tree)概念

1.1 二叉树定义

二叉树由结点的有限集合构成,该集合可以为空集,也可以是由一个根节点(root)和两棵互不相交、分别称作根的左子树(left subtree)和右子树(right subtree)组成。

1.2 二叉树的五种形态

空左、空右、左右都空、独根(左右都不空)、整个都空(连根都没有)。

1.3 二叉树相关术语

(1)边:两个结点的有序对,称作边。有序代表有方向,事实上二叉树是从父结点发向子结点的,是有方向的,但是一般可以省略不写。如下图所示。从A到B的这个过程就 是一个边。

(2)层数:根为第0层,其它结点每下降一次为一层。

(3)深度:层数最大的叶结点的层数。

(4)高度:层数最大的叶结点的层数加1。

在上图的例子中,深度是2,高度是3。

1.4 几种特殊的二叉树

1.4.1 满二叉树

如果一棵二叉树的任何结点或是树叶恰好都有两棵非空结点,那么它就是一个满二叉树。

1.4.2 完全二叉树

最多只有最下面的两层结点度数可以小于2,最下一层的结点都集中在最左边。

1.4.3 扩充二叉树

所有空子树都增加空树叶,使得外部路径总长度E和内部路径长度I满足:E=I+2n, n为内部结点个数。

1.4.4 表达式二叉树

通过二叉树的不同遍历(会在2.1 讲到遍历方式)来输出不同的表达式。

——摘自课程

1.5 二叉树主要性质

  1. 二叉树第i层上最多有2^i个结点(i>=0)
  2. 深度为k的二叉树至多油w^(k+1)-1个结点(k>=0)
  3. 二叉树的终端结点(度为0的结点,即没有子树的结点)数n0与度为2的结点数(即有两个结点)为n2有关系:n0=n2+1 。如下图所示,n0=3, n2=2, 满足n0=n2+1。

     

  4. 【满二叉树定理】非空满二叉树树叶数目等于其分支节点数加1. 例如,如下图所示,树叶(度为0的结点)数目为4,分支结点(度不为0的结点)数目为3,所以4=3+1

     

  5. 【满二叉树定理推论】一个非空二叉树的空子树数目等于其结点数加1.(接上图例子,4=3+1)
  6. 有n个结点的完全二叉树的高度为log_{2}^{n+1},深度为log_{2}^{n+1}-1

2. 二叉树的抽象数据类型

抽象数据类型:逻辑结构+运算

2.1 深度优先搜索(DFS)

顾名思义深搜是按照二叉树深度遍历的。

二叉树深搜栈的深度和树的高度有关,最好是O(log n),最坏为O(n)。

以下三种遍历访问方法的根本区别是根结点在什么时候被访问。在三种遍历中,每个结点都只被访问过一次,因此时间代价为O(n)。

2.1.1 前序遍历(preorder traversal)

tLR次序

  1. 访问根结点
  2. 按前序遍历左子树
  3. 按前序遍历右子树

2.1.2 中序遍历(inorder traversal)

LtR次序

  1. 按中序遍历左子树
  2. 访问根结点
  3. 按中序遍历右子树

2.1.3 后序遍历(postorder traversal)

LRt次序

  1. 按后序遍历左子树
  2. 按后序遍历右子树
  3. 访问根结点
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值