树与二叉树学习

第一块:介绍二叉树的一些基本知识

1.1:二叉树的基本概念

 二叉树是每个结点最多有两个子树的树结构

1.2:二叉树的五种基本形态和两种特殊形态:

五种基本形态:

两种特殊形态:

1.3:二叉树的性质:

A、在二叉树的第i层上最多有2^(i-1)个结点(i>=1)。
B、高度为k的二叉树,最多有2^k-1个结点(k>=0)。
C、对任何一棵二叉树,如果其叶结点有n个,度为2的非叶子结点有m个,则
n = m + 1。------终端结点=度为二的非叶结点+1----n0=n2+1

1.4:二叉树的存储结构—顺序存储和链式存储

见文档:https://www.cnblogs.com/yw-ah/p/5872516.html

第二块:介绍二叉树的递归遍历与层序遍历

可参考博客 https://blog.csdn.net/peiyao456/article/details/52667057

 

递归遍历:

2.1:先序遍历 (根左右)    

2.2:中序遍历 (左根右)

2.3:后序遍历 (左右根)

层序遍历:一层一层遍历

 

第三块:介绍二叉树,树,森林之间的转换

将树转换为二叉树:

1. 在所有兄弟结点之间加一连线

2. 对每个结点,除了保留与其长子的连线外,去掉该结点与其它孩子的连线。

将一个森林转换为二叉树:

  1. 将森林中的每棵树变为二叉树
  2. 因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树

二叉树转换为树

  1. 加线。若某结点X的左孩子结点存在,则将这个左孩子的右孩子结点、右孩子的右孩子结点、右孩子的右孩子的右孩子结点…,都作为结点X的孩子。将结点X与这些右孩子结点用线连接起来。
  2. 去线。删除原二叉树中所有结点与其右孩子结点的连线。二叉树转换为森林:

二叉树转换为森林:

假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树

1.从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。再查看分离后的二叉树,若其根节点的右孩子存在,则连线删除…。直到所有这些根节点与右孩子的连线都删除为止。

2.将每棵分离后的二叉树转换为树。

更多例题请见 https://jingyan.baidu.com/article/19020a0a743851529d28421a.html

 

第四块:最优二叉树之哈夫曼树

1了解基本概念,什么是哈夫曼树?

    哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。

    如何构造哈夫曼树并画出其对应的哈弗慢编码是重点,要考

  1. WPL=7*2+5*2+2*2+4*2=36
  2. WPL=7*3+5*3+4*2+2*1=46
  3. WPL=4*3+2*3+5*2+7*1=35

所以(b)的带权路劲最小,故其是最优二叉树(哈夫曼树)

2掌握构建哈夫曼树

    见文档:https://jingyan.baidu.com/article/380abd0a717c061d90192ca2.html

3哈夫曼编码

利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子节点都有一条路径,对路径上的各分支约定指向左子树的分支表示"0"码,指向右子树的分支表示"1"码,取每条路径上的"0"或"1"的序列作为各个叶子节点对应的字符编码,即是哈夫曼编码。

用二叉树设计哈夫曼前缀编码

A:0 C:10 B:110 D:111

第五块:线索二叉树

见博客https://www.cnblogs.com/guweiwei/p/7090050.html

引入二叉线索树的目的是什么:找一个节点的前驱后继的时候,比非二叉线索树强

第六块:补充树的基本知识

  1. 树是一种重要的非线性结构,具有一对多或者多对一的关系
  2. 度:一个结点所拥有的子树的个数称为结点的度
  3. 叶子结点或者终端结点:度为0的结点
  4. 非叶子节点或分支或者非终端结点:度不为0的结点
  5. 树的度:是树内各结点度最大的值
  6. 结点数=总度数+1
  7. 树的家族谱:孩子,祖先,双亲,堂兄弟
  8. 层次,深度:最大的层次
  9. 有序树:树中结点各子树看成从左到右是有次序的
posted @ 2019-07-26 20:14  曾聪聪  阅读(303)  评论(0编辑  收藏  举报