树的基本知识点

本文整理了关于树的一些基本知识点:

1.   树是一种非线性数据结构,编译器中可用树来表示源程序的语法结构。在任意一颗非空树中,有且仅有一个特定的称为根(root)的节点。


2.   节点拥有的子树数称为节点的度(Degree)。度为0的节点称为叶子(leaf)或终端节点。度不为0的节点称为非终端节点或分支节点。除根节点外,分支结点也称为内部节点。树的度是树中各节点的度的最大值。


3.   节点的祖先是从根到该节点所经分支上的所有节点,包括父亲节点,祖父节点等等。节点的层次从根开始定义起,根为第1层,根的孩子为第二层,树中节点的最大层次称为树的深度或者高度。森林(Forest)是由m棵互不相交的树的集合。对树中的每一个节点而言,其子树的集合即为森林。


4.   二叉树中不存在度大于2的节点。二叉树有以下几点性质:

a)     在二叉树的第k层上至多有2k-1个节点,k≥1。

b)    深度为K的二叉树至多有2K-1个节点,K≥1。

c)     对任何一颗二叉树,如果其终端节点数为n0,度为2的节点数为n2,则有n0=n2+1。

证明:设二叉树中度为0,1,2的节点数分别为n0,n1,n2,总节点数为n。则有n=n0+n1+n2,另外再看二叉树中的分支数,除了根节点外,其余节点都有一个分支进入,  即 n=B+1,其中B表示分支数,由于这些分支都是由度为1或2的节点射出的,所以B=n1+2n2。所以可得:n0=n2+1

d)    具有n个节点的完全二叉树的深度为floor(log2n)+1。


5.   一棵深度为K且有2K-1个节点的二叉树称为满二叉树,完全二叉树就是除了最后一层的节点外其它层都是满的,最后一层也许不满,但是也是也从左往右依次连续分布的。


6.   二叉树的存储结构:顺序存储结构:用数组存,把二叉树看作完全二叉树,类似于堆的形式,用0表示不存在的节点,这样存在内存空间浪费严重的情况。链式存储结构:二叉链表,三叉链表(相比于二叉链表增加了一个指向父节点的指针域)。


7.   遍历二叉树的方法有如下:

a)     先序遍历:先访问根节点,再先序遍历左子树,最后先序遍历右子树。

b)    中序遍历:先中序遍历左子树,再访问根节点,最后中序遍历右子树。

c)     后序遍历:后序遍历左子树,后序遍历右子树,最后访问根节点。


8.   利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。对二叉树以某种次序遍历使其变为线索二叉树的过程叫做线索化。


9.   采用同构多重链表表示树结构时,对于一颗有n个节点的度为k的树中必有n(k-1)+1个空链域。证明:n个节点的度为k的树采用同构节点格式的话共有指针域nk个,又由于除了根节点外,其余节点都有一个分支进入,即n=B+1,B表示分支数,即指针域数,所以空的指针域必为nk-(n-1)=n(k-1)+1。面试题:一个包含n个节点的四叉树,每一个节点都有4个指向孩子节点的指针,这个四叉树有4n-(n-1)=3n+1个空指针。


10. 当森林转化为二叉树时,第一棵树的根节点即为二叉树的根节点,其第一棵树的子树森林转化为左子树,剩余树的森林转化成右子树,则森林的先序遍历与中序遍历即为对应的二叉树先序遍历和中序遍历。


11. 赫夫曼树又称为最优树,是一类带权路径长度(WPL)最短的树。从树中一个节点到另外一个节点之间的分支数目称为路径长度,树的路径长度是从树根到每一个节点的路径长度之和。树的带全路径长度为树中所有叶子节点的带权长度之和。如下图的WPL=35。



12. 构造赫夫曼树步骤:

a)     根据给定的n个权值{w1,w2,w3,w4,…,wn}构成n棵二叉树的结合F={T1,T2,…,Tn},其中每一棵二叉树Ti只有一个带权为wi的根节点,左右子树均为空。

b)    在F中选取两颗根节点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根节点的权值为左右子树上根节点的权值之和。

c)     在F中删除这两棵树,同时将新得到的二叉树加入F中。

d)    重复上面第二第三步骤,直到F中只含有一棵树为止,这便是赫夫曼树。


13. 编码时,为了保证解码的可操作性,需要保证任意一个字符的编码都不是另一个字符编码的前缀,这样的编码称为前缀编码。赫夫曼编码时一种二进制前缀编码。赫夫曼树中没有度为1的节点,这类树又称严格地或正则的二叉树,一颗有n个叶子节点的赫夫曼树共有2n-1个节点。赫夫曼编码的码字是不唯一的。


14. 具有n个节点的不同形态的二叉树有多少棵?即具有n个节点的互不相似的二叉树数目有多少个?二叉树相似是指两个二叉树均为空树或者二者绝不为空,且它们的左右子树分别相似。二叉树等价是指两个二叉树不仅相似,而且所有对应节点上的数据元素相等。具有n个节点的不同形态的二叉树的数目有 C(n,2n)/(n+1)个。


15. 由于前序遍历和中序遍历可以唯一确定一个二叉树结构,若我们对n个节点依次编号为123…n,则不同形态二叉树的数目恰好为前序遍历序列均为123…n的二叉树所能得到的中序遍历序列的数目,即为数列123…n按不同顺序进栈和出栈的所能得到的排列的数目,为C(n,2n)/(n+1) 个。


16. 具有n个节点的不同形态的树的数目(注意这里没说是二叉树)和具有n-1个节点互不相似的二叉树的数目相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值