树与二叉树(数据结构)
(1)树的基本性质
- 1.树中的结点数等于所有结点的度数+1。
- 2.树中结点的最大度数称为树的度。
- 3.度为m的树中第i层上至多有mi-1个结点。
- 4.高度为h的m叉树至多有(mh-1)/(m-1)个结点。
- 5.具有n个结点的m叉树的最小高度math.ceil(logm[n(m-1)+1])
(2)二叉树的基本性质
- 二叉树是有序树,次序不能颠倒。
- 二叉树可以为空,但度为2的树至少有3个结点。
- 满二叉树:高度h,结点总数为2h-1。【最完美的二叉树】
- 完全二叉树:仅次于满二叉树之后完美的二叉树。【有一些完美的性质】
- 二叉树排序树:左子树小于根节点,右子树大于根节点。左子树和右子树又各是一颗二叉排序树。
- 平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1.【最苛刻的二叉树】
二叉树的一些完美性质:
- 1.叶子结点树等于度为2的结点数+1。即N0=N2+1.
- 2.非空二叉树上第K层最多有2k-1个结点。(满二叉树)
- 3.高度为H的二叉树最多有2H-1个结点。【完美二叉树、满二叉树】
- 4.对完全二叉树从1到N标号时:
- i>1时,它的双亲结点编号为math.floor(i/2).
- 2i<=N时,结点i的左孩子编号为2i,否则无左孩子。2i+1<=N时,结点i的右孩子为2i+1.否则无右孩子。
- 结点i所在的深度为math.floor(log2i)+1
- 5.具有N个结点的完全二叉树的高度为:math.floor(log2N)+1或math.ceil(log2N+1)
树与二叉树的应用:(重要)
- 二叉排序树(二叉查找树BST)
- 二叉排序树的中序遍历是递增有序的序列。(不然怎么叫排序树呢)
- 二叉排序树的查找:先与根节点比较,之后左子树,右子树。
- 二叉排序树的插入:插入的新节点一定是某个叶节点。
- 二叉排序树的删除:
- ①若删除结点是叶子结点,则直接删除,不会破坏二叉树的性质。
- ②若删除结点只有一棵左子树或右子树,让其子树代替其原来位置即可。
- ③既有左子树又有右子树的情况,在右子树上找中序第一个子女填补。
查找算法的平均查找长度,主要取决于树的高度--->最坏情况下O(n)(n代单传)
2.平衡二叉树
-
- 为了避免树的高度增长过快,降低二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意节点的左右子树的高度差不超过1,称为平衡二叉树,简称平衡树。
3.哈夫曼树和哈夫曼编码
bling bling