树的一些总结

公式
深度为h的二叉树最多有2^h-1个节点

二叉排序树就是二叉搜索树BST,中序遍历从小到大输出。中序遍历是递增的


最优树是哈夫曼树,而哈夫曼树不一定是完全二叉树。


完全二叉树:
二叉树是非线性数据结构,顺序存储结构和链式存储结构都能存储

顺序存储一般只适用于完全二叉树,就是用一维数组存储二叉树中的结点

堆是一个完全二叉树,堆排序每次将堆顶最大元素取出,重新维护堆的性质使得堆顶为剩下元素最大值,不断重复即完成排序


二叉树的遍历:

一般树的先根序遍历与对应的二叉树的先根序遍历序列一致,后根序遍历与对应二叉树的中根序遍历序列相同

二叉树的后序遍历序列中,任意一个结点均处在其孩子结点的后面

只有当同时拥有中序遍历和(前序遍历或后序遍历中的一个)才能够确定一棵二叉树

前序遍历(中左右)、中序遍历(左中右)的最后访问的节点都是左或右叶节点,
叶节点是没有子树的,所以两个指针域空出来了,可以存放线索指针。但是后续遍历(左右中),
最后访问的子树的根节点,子树根节点的两个指针域都指向子树了,所以不能空出来存放线索信息。


红黑树是平衡二叉树,也就是左右子树是平衡的,高度大概相等。
这种情况等价于一块完全二叉树的高度,查找的时间复杂度是树的高度,为logn


二叉排序树
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。

二叉搜索树是排序过的二叉树,即左子树中的结点值小于根结点的值,右子树中的结点值大于根节点的值

二叉排序树中序遍历的结果是从小打大完全有序的序列。题目中说两棵树的关键字集合相同,所以得到的有序序列也是相同的

二叉排序树的左子树节点都比该节点小,右子树节点都比该节点打
要得到一个从小到大的有序序列,就要按照 左 中 右的顺序遍历
符合该条件的遍历就是中序遍历

堆对于左右子树大小没有要求,而二叉排序树有要求,并且,大根堆和小根堆均不为二叉排序树


二叉线索树:

若X 是后序线索二叉树中的叶结点,且 X 存在左兄弟结点 Y,则 X 的右线索指向的是( )。
后序遍历,左右根,X左线索指前驱,右线索指后继,X有左兄弟,那么X的后继就是父结点


折半查找的查找长度至多为㏒2 n +1,二元查找树最坏时需查找n次(数列有序,树只有左孩子或只有右孩子,退化为线性表)


前序和后续线索化都是1,中序是2。


树转为二叉树:
将树转化为二叉树的形态是唯一的
将树T转换成二叉树B之后,那么对于B中的某个节点N:
(1)如果存在左子树,则该左子树一定来自于N在树T中的长子;
(2)如果存在右子树,则该右子树一定来自于N在树T中邻接右兄弟;
所以,根据第二条规则,如果X是其双亲的右孩子,则在树T中,X一定有左兄弟。


森林转换为二叉树:
1. 把每棵树转换为二叉树。
2. 第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。

树转化为二叉树
树转化为二叉树 先序遍历对应二叉树的先序遍历 后序遍历对应二叉树的中序遍历
设一棵树 T 可以转化成二叉树 ,则二叉树 的根节点一定没有右子树。

树,二叉树,森林各种遍历总结:
树的前序遍历,对应二叉树的前序遍历。
树的后序遍历,对应二叉树的中序遍历。
树的层次遍历,对应二叉树的后序遍历。

森林的前序遍历,对应二叉树的前序遍历。
森林的中序遍历,对应二叉树的中序遍历。


最小生成树问题是构造连通网的最小代价生成树()


引入二叉线索树的目的是:加快查找结点的前驱或后继的速度


每个结点有2个指针域(指向左孩子和右孩子),n个结点总共有2n个;
一个n个结点的树有n-1条边,那么线索数= 2n - (n-1) = n + 1.

对于 一个有n个结点的二叉链表,每个结点有指向左右孩子的两个指针域,所以一共有2n个指针域。而n个结点的二叉树一共有n-1条分支线树,也就是说,其实是存在2n-(n-1)=n+1个空指针
2n-(n+1)个非空指针域。

一个包含n个节点的四叉树,每个节点都有四个指向孩子节点的指针,这4n个指针中有多少个空指针?

n个节点,每个节点有4个指向孩子的指针,所以共有4n个指针。
其中,除根节点外,其余节点都有一个指针指向它们。
所以空指针的个数是:4n-(n-1)=3n+1


简单来说就是根节点开始算起,右支上的所有右节点的个数


第一个叶结点,编号最小的叶结点为【n/2】+1


深度为k具有n个结点的完全二叉树,其编号最小的叶结点序号为[n/2]+1


二叉排序树
二叉排序树的主要用途是链式存储结构的二分查找,查找的最坏次数是树的高度,因此高度最小的二叉排序树是最佳的。

假设二叉排序树的定义是:1、若它的左子树不为空,则左子树所有节点均小于它的根节点的值;2、若右子树不为空,则右子树所有节点的值均大于根节点的值;3、它的左右子树也分别为二叉排序树。下列哪种遍历之后得到一个递增有序数列 :中序遍历


中序遍历:
中根遍历二元查找树所得序列一定是有序序列。
非空二叉树中序遍历(无头结点的情况)线索化后,第一个结点无前驱,最后一个结点无后继


二叉查找树可以是任意高度,甚至退化为链表
八叉树和B+树 B树不是二叉树
红黑树是平衡二叉树
完全二叉树左右子树的高度最多差1,也是平衡二叉树


平衡二叉树:

平衡二叉树的平衡因子只能为1,-1,0,也就是绝对值不大于1。而B-树中平衡因子等于0

从平衡因子定义看,完全二叉树任一结点的平衡因子的绝对值确实是小于等于1。但是,平衡二叉树本质上是二叉排序树,完全二叉树不一定是排序树。故不能说完全二叉树是平衡二叉树。


深度优先与广度优先:
采用邻接表存储的图按深度优先搜索方法进行遍历的算法类似于二叉树的:前序遍历
广度优先遍历类似于二叉树的:层次遍历。
广度(层次遍历)优先遍历用队列,深度优先遍历用栈


生成树
只有图为无向连通图时才能生成树。多个连通分量无法构成树


最小生成树:
最小生成树是无向图的连通子图。从不同的结点开始,图的存储方式不同,生成树都不相同。
最小生成树的代价是唯一确定且最小,但树形可能不一样
无向连通图的最小生成树可能不唯一,但总代价一定是最小的,也就是权值和唯一

最小生成代价树是唯一的,不是最小生成树

普利姆算法和克鲁斯卡尔算法都是找到最小生成树:
1.生成的树可能相同,也可能不同
2.但是其权值一定相同,都是最小的那个值

最小生成树可以有多个, 他们的权值相等且最小即可


二叉查找树
对任意点,后面的元素要么全部大于它,要么全部小于它


m阶B树:
根结点至多有m棵子树
如果根节点不是叶节点,则其至少有两棵子树。
所有叶子都在同一层次上。这里包含的意思是所有的叶子节点都要出现在同一层,所以树高相等
非叶结点至少有m/2 (m为偶数)或m/2+1(m为奇数)棵子树

在一个m阶的B-树上,每个树根结点中所含的关键字数目最多允许为( )个,最少允许为( )个。
关键字的个数n必须满足: [ceil(m / 2)-1]<= n <= m-1 (ceil为取上整)
最多M-1 最少M/2-1 向上取整

B-树

在9阶B-树中,除叶子与根节点以外的任意结点的分支数介于5和9之间。对。9/2=4余1,所以此处最小值应该为5而非4

首先B-树是一颗平衡多叉树
其次,B-树是有序的,属于排序树。
再次,m阶B-树也是一颗m叉平衡排序树。


B树和B+树的比较:
B树和B+树都是平衡的多叉树
B树和B+树都可用于文件的索引结构
但是
B树只适合随机检索
B+树适合于顺序检索和随机检索

B树是一种平衡的多叉树
B-树是一种多路搜索树,是多叉树
B+是一种多路搜索树
AVL是平衡二叉树
红黑树也是一种二叉树

B+树是B-树的变体,也是一种多路搜索树,在B-树的基础上做了一些改动。 B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;

B+树中,所有的叶子结点中包含了全部关键码的信息,及指向含有这些关键码记录的指针,且 叶子结点本身依关键码的大小自小而大的顺序连接


Prim算法:
记住了 Prim算法的时间复杂度 邻接表存储时,是 O(n+e)
图的时候 是O(n^2)


在中序线索二叉树中,每一非空的线索均指向其祖先结点。


逻辑结构:集合、线性、树形、图形
物理结构:顺序、链式


线索二叉树中某结点 R 没有左孩子的充要条件是( )。
答案:R.ltag=1

LTag=0 lchild域指示结点的左孩子
1 lchild域指示结点的前驱

RTag=0 rchild域指示结点的右孩子
1 rchild域指示结点的后继


树的时间复杂度:

在二叉排序树中插入一个结点最坏情况下的时间复杂度为()。

最差情况下是O(n) 如果是最一般最基础的二叉树的话, 因为深度不平衡,所以会发展成单链的形状,就是一条线 n个点那么深
如果是深度平衡的二叉树 o(logn)

平衡二叉树的时间复杂度是log(n),如果二叉树的元素个数为n,那么不管是对树进行插入节点、查找、删除节点都是log(n)次循环调用就可以了。它的时间复杂度相对于其他数据结构如数组等是最优的。


树的表示方法:
树的表示方法:父亲数组表示法;儿子链表表示法;左儿子右兄弟二叉树表示法。


一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足?
答案:只有一个叶子节点。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值