树(Tree) 是 n(n>=0) 个结点的有限集。n=0 时称为空树。在任意一颗非空树中:
(1)、有且仅有一个特定的称为根(root)的结点
(2)、当 n>1 时,其余结点可分为 m(m>0) 个互不相交的有限集 T1、T2、......Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)
1、结点分类
2、结点间的关系
3、结点层次
4、树的抽象数据类型
5、二叉树的定义
二叉树(Binary Tree)是 n (n>=0) 个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两颗互不相交的、分别称为根节点的左子树和右子树的二叉树组成6、特殊二叉树
6.1、斜树
所有的结点都只有左子树的二叉树叫左斜树
所有的结点都只有右子树的二叉树叫右斜树
6.2、满二叉树
在一颗二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树6.3、完全二叉树
对一颗具有 n 个结点的二叉树按层序编号,如果编号为 i (1<= i <= n) 的结点与同样深度的满二叉树中编号为 i 的结点在二叉树中位置完全相同,则这颗二叉树称为完全二叉树7、二叉树的性质
- 在二叉树的第 i 层上至多有 2i-1 个结点 (i>=1)
- 深度为 k 的二叉树至多有 2k-1 个结点 (k>=1)
- 对任何一颗二叉树 T,如果其终端(叶子)节点数为 n0,度为 2 的节点数为 n2,则 n0 = n2 + 1
8、二叉树的存储结构
9、二叉树遍历算法
- 前序遍历、中序遍历、后序遍历、层序遍历
10、线索二叉树
研究中发现,二叉链表有很多浪费的空指针可以利用,查找某个节点的前驱和后继为什么非要每次遍历才可以得到,这就引出了如何构造一颗线索二叉树的问题。线索二叉树给二叉树的节点查找和遍历带来了高效率11、赫夫曼树
赫夫曼编码 - 基本的压缩编码方法
-
赫夫曼树更大目的是为了解决当年远距离通信(主要是电报)的数据传输的最优化问题