树学习(1)
来源:互联网 发布:知乎 车枪球 编辑:程序博客网 时间:2024/06/10 06:26
1、 二叉树是非线性数据结构,所以顺序存储结构与链式存储结构都能存储。
(分析:普通二叉树可以用链表存储,对于完全二叉树由于树本身的特性,一个节点标号为i,则其左孩子为2i+1,右孩子为2i+2,父节点为(i-1)*2
由此公式可以通过数组来存储。数组为顺序存储结构,链表为链式存储结构。
2、 完全二叉树中,非叶节点最多没有右孩子。没有左孩子的话,就表示没有子节点。
完全二叉树的特点:
1) 只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的两层上出现;
2) 对任一结点,如果其右子树的深度为j,则其左子树的深度必为j或者j+1。即度为1的点只有1个或者0个。
如果根结点没有左子树,对于完全二叉树,也不会有右子树,就是一个只有一个顶点的二叉树。
3、 一颗左子树为空的二叉树在前序线索化后,其中空的链域个数是:2.
分析:线索化后,空域就是没有前驱,没有后继。不仅左子树为空的二叉树,其他二叉树也是如此。
4、 以N代表二叉树总结点数,n0,n1,n2,分别代表度为0,1,2,的结点数。
那么可以得到:N=n0+n1+n2;
N=2*n2+n1+1(1代表根结点);
联立上面两个等式,可以得到二叉树中叶子结点(度为0)和度为2的结点关系:n2=n0-1;
5、 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0,右孩子的平衡因子为1,则应作RL型调整以使其平衡。
分析:插入一个新结点后,A的左子树平衡因子为0,右子树平衡因子为1,因此导致不平衡不可能在A的左子树上插入。若是在A的右子树上插入结点,因为插入结点后平衡因子变为1,所以必定是在A的右子树的根结点的左子树插入。
------------------------------------------------------------------------------------
(1)首先找出插入新结点后失去平衡的最小子树根结点的指针。
(2)然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。
(3)当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树又变成了一颗平衡二叉树。
失去平衡的最小子树是指以离插入结点最近,且平衡因子绝对值大于1的结点作为根的子树。平衡因子=左子树的高度-右子树的高度
平衡二叉树AVL可以是空树。
假如不是空树,任何一个结点的左子树和右子树都是平衡二叉树,并且高度之差的绝对值不超过1,平衡因子=左子树的高度-右子树的高度。
AVL树的插入时的失衡与调整平衡二叉树的失衡调整主要是通过旋转最小失衡子树来实现。
调整子树操作分为:LL、RR、LR、RL平衡旋转法。
LL
RR
LR
RL
6、 一个包含n个结点的四叉树,每个节点都有4个指向孩子结点的指针,这4n个指针中有3n+1个指针。
分析:n个结点为一颗树则有n-1条边,因此有n-1非空指针。所以空指针个数为:4n-(n-1)=3n+1
7、 二叉排序树或者一颗空树性质:
1) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2) 若右子树不空,则右子树上所有结点的值均大小等于根结点的值;
3) 左右子树也分别为二叉排序树;
4) 没有键值相等的结点;
8、 1)二叉树第i层最多有2^(i-1)个结点(i>=1);
2)深度为k的二叉树至多有2^k-1个结点(k>=1);
3)对于任何一个二叉树,如果其终端结点数为n0,度为2的结点数位n2,则n0=n2+1;
4)具有n个结点的完全二叉树的深度为[log n]+1
深度是从上往下数(第一层为1);高度是从下往上数(最后一层为1)
- 树学习(1)
- 字符串学习学习(1)
- 线段树学习(1)
- 学习总结:机器学习(1)学习资料汇总
- 【Android学习笔记】Service学习(1)
- Android 4学习(1):学习路线图
- [学习记录]Kepware学习记录(1)
- Weka学习 -- StringToWordVector 源码学习(1)
- (1)ok6410学习之makefile学习
- sql学习笔记(1)-------------学习基础
- 周志华 机器学习 学习笔记 (1)
- 集成学习学习笔记(1)
- Clojure 学习入门(1) - 学习资料
- 机器学习-(1):监督学习
- 学习路径之机器学习(1)
- Linux学习路程(1) 学习目的
- 数据结构学习_树(1)
- 行为树-学习笔记(1)
- java.lang.ClassCastException:android.widget.LinearLayout$LayoutParams cannot be cast to android.widg
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- leetcode392. Is Subsequence
- 链表相关的热点面试题(一)
- RSA算法
- 树学习(1)
- matlab下生成随机文件名函数
- 144. Binary Tree Preorder Traversal
- Android面试题-解决字体适配
- 前端框架Vue.js的使用及具体页面跳转时的参数传递
- Android的listView的一级优化
- Android设置全屏方法
- 矩阵快速幂模板
- 原始ajax的基本实现步骤