概述
1. 二元查找树的任何结点的左右子树都是二元查找树。
分析:二元查找树: 它首先要是一棵二元树,在这基础上它或者是一棵空树;或者是具有下列性质的二元树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二元查找树
2. 树中的结点和图中的顶点就是指数据结构中的数据元素。
3. 还原树必须要包括中序序列在内的任意两种序列。
4. 若二叉树用二叉链表作存储结构,则在n个结点的二叉树链表中只有n-1个非空指针域。
补充:在一个包含n个结点的四叉树,每个节点都有四个指向孩子结点的指针。这4n个指针中有3n+1个空指针。
分析:n个结点为一棵树则有n-1条边,因此有n-1个非空指针,所以空指针数目为4n-(n-1)=3n+1;
5. 在二叉树结点的前序序列、中序序列和后序序列中,所有叶节点的先后顺序:完全相同。
分析:因为根据三个遍历的次序和特点:前序是根左右、中序是左根右、后序是左右根,因此相对次序发生变化的都是子树的根,也就是分支结点(或者说非叶子结点,度数>0)。叶结点的先后顺序是不变的。
变化的只是非叶子的结点位置,叶子结点的相对位置是不变的。
6. 平衡二叉树中插入一个节点后造成不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0,右孩子的平衡因子为1,则应作RL型调整以使其平衡。
分析:平衡因子=左子树高度-右子树高度。
LL:左子树的左孩子上插入;LR左子树的右孩子插入;以此类推,然后平衡因子的计算是左边的减去右边的。得出的值来判断属于前4种情况的哪一种,然后调整;LL往右边转,转完以后缺哪补哪,RR往左边转。LR先右后左,RL先左后右。其中LR是先转成LL,RL是先转成RR
补充:若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树就又成为一棵平衡二叉树。
失去平衡的最小子树是指以离插入结点最近,且平衡因子绝对值大于1的结点作为根的子树。假设用A表示失去平衡的最小子树的根结点,则调整该子树的操作可归纳为下列四种情况。
(1)LL型平衡旋转法
由于在A的左孩子B的左子树上插入结点F,使A的平衡因子由1增至2而失去平衡。故需进行一次顺时针旋转操作。即将A的左孩子B向右上旋转代替A作为根结点,A向右下旋转成为B的右子树的根结点。而原来 B 的右子树则变成A的左子树。
(2)RR型平衡旋转法
由于在A的右孩子C的右子树上插入结点F,使A的平衡因子由-1减至-2而失去平衡。故需进行一次逆时针旋转操作。即将A的右孩子C向左上旋转代替A作为根结点,A向左下旋转成为C的左子树的根结点。而原来 C 的左子树则变成A的右子树。
(3)LR型平衡旋转法
由于在A的左孩子B的右子数上插入结点F,使A的平衡因子由1增至2而失去平衡。故需进行两次旋转操作(先逆时针,后顺时针)。即先将A结点的左孩子B的右子树的根结点D向左上旋转提升到B结点的位置,然后再把该D结点向右上旋转提升到A结点的位置。即先使之成为LL型,再按LL型处理。
如图中所示,即先将圆圈部分先调整为平衡树,然后将其以根结点接到A的左子树上,此时成为LL型,再按LL型处理成平衡型。
(4)RL型平衡旋转法
由于在A的右孩子C的左子树上插入结点F,使A的平衡因子由-1减至-2而失去平衡。故需进行两次旋转操作(先顺时针,后逆时针),即先将A结点的右孩子C的左子树的根结点D向右上旋转提升到 C 结点的位置,然后再把该D结点向左上旋转提升到A结点的位置。即先使之成为RR型,再按RR型处理。
如图中所示,即先将圆圈部分先调整为平衡树,然后将其以根结点接到A的左子树上,此时成为RR型,再按RR型处理成平衡型。
平衡化靠的是旋转。参与旋转的是3个节点(其中一个可能是外部节点NULL),旋转就是把这3个节点转个位置。注意的是,左旋的时候p->right一定不为空,右旋的时候p->left一定不为空,这是显而易见的。
如果从空树开始建立,并时刻保持平衡,那么不平衡只会发生在插入删除操作上,而不平衡的标志就是出现bf == 2或者bf == -2的节点。
7. B系列树,包括B树、B+树、B*树,所有叶子节点都在同一层,所以左右子树的高度都是相等的。
M阶B-树的任一个结点要么有m个孩子,要么没有孩子。
8. 一个有n个结点的连通图的生成树是原图的最小连通子图,且包含原图中所有n个结点,并且有保持图连通的最少的边。最大生成树就是权和最大生成树,现在给出一个无向带权图的邻接矩阵,权为0表示没有边。{{0,4,5,0,3},{4,0,4,2,3},{5,4,0,2,0},{0,2,2,0,1},{3,3,0,1,0}},求这个图的最大生成树的权和。
分析:
利用kruskal,不同的是,这次我们按照从大到小的顺序,从图中选择边,同时保证选择该边不会与之前选过的边组成一个回路。最终选择5 4 3 2 四条边。
9. 树的先序遍历,如果采用非递归方式,需要用栈作为辅助空间。
深度优先搜索借助栈;广度优先搜索借助队列。
10. 二叉树的形态个数就是卡特兰数C(2n,n)/(n+1).对一颗二叉树进行后序遍历,输出结果为A,B,C,这样的二叉树有5颗。
11. 根据“二叉树T中任一结点V,其编号等于左子树上最小编号减一,而V的右子树的结点中,其最小编号等于V左子树上结点的最大编号加1”可知符合前序遍历的性质。
最后
以上就是明亮夏天为你收集整理的树学习(5)的全部内容,希望文章能够帮你解决树学习(5)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复