美文网首页
关于树的几类计算

关于树的几类计算

作者: 喜忧参半 | 来源:发表于2021-09-08 14:36 被阅读0次

求解方法归纳:
(1)求解二叉树中节点个数的方法。
非空二叉树上叶子结点数等于双分支结点数加1,即=n_0=n_2+1.
在一颗二叉树中,所有结点分支数等于所有结点度之和=n_1+2n_2.
n=n_0+n_1+n_2 n_0是度为0的结点,n_1是度为1的结点,n_2是度为2的结点。
对于一棵具有n个结点的树,则树中所有结点的度数之和为n-1。
树中所有结点度之和=n-1=n_1+2n_2


(2)求解完全二叉树中节点个数的方法。
已知,完全二叉树形体一定,所以结点数n确定时,其树形就确定了,可以计算出高度h以及n_0,n_1和n_2。
h=⌈log_2(n+1) ⌉= ⌊log_2n⌋+1
(3)求解满二叉树中节点个数的方法。
n_0=n_?+1
满二叉树是最严格的二叉树,当结点数n确定时,其树形就确定了,可以计算出高度h以及n_0,n_1和n_2。 h=log_2(n+1)由满二叉树的性质可知:
度为1的结点数:n_1=0
总结点数:n=2^h-1
度为0的结点数:n_0=2^{h-1}
度为2的结点数:n_2=2^{h-1}-1


题目1:

在度为4的树中,若有20个度为4的节点,10个度为3的节点,1个度为2的节点,10个度为1的节点,则树T的叶节点个数是?

答:
我们知道,树的节点的个数=树的度+1
于是树的节点个数N = 1 + 20*4 + 10*3 + 1*2 + 10*1
但同时,树的节点个数也可以写成是:叶子节点数+度为1的节点数+…+度为4的节点数,即N = N0 + 20 + 10 + 1 + 10 ,其中N0为叶子节点个数
由上述两个式子就可解出叶子节点个数为82了。

题目2:

设二叉树有2n个节点,且m<n,不可能存在()的节点
A. n个度为0 B. 2m个度为0 C. 2m个度为1 D. 2m个度为2

这道题涉及到的知识为::
二叉树中,叶节点的数目N0等于度为2的节点数目N2加一。 即 N0 = N2 + 1
设度为i的节点的数量为Ni,则 2n = N0 + N1 + N2
又因N0 = N2 + 1,故2n = N1 + 2N2 + 1
因此可以推算出 N1 = 2n - 2N2 -1 ,必为奇数,由此直接判断本题选C

题目3:

【2009年计算机联考真题】若一颗完全二叉树有768个结点,则该二叉树叶节点个数为?

该题有两种算法。
算法一:
完全二叉树中最后一个树枝节点的编号为n/2
因此该完全二叉树最后一个数值结点的编号为768/2=384(从1开始编号),所以叶子节点个数为768-384=384
算法二:
设N为二叉树总节点数,Ni 为 度为i的节点数
N = N0 + N1 + N2, N0 = N2 + 1 ,即 N = N1 + 2N2 + 1
因此768 = N1 + 2N2+1,而N1只能等于0或1(完全二叉树中)
所以可以解出N1 = 1,N2 = 383,所以N0 = N2+1=384

题目4:

已知一棵有2011个结点的树,其叶结点个数是11个,该树对应的二叉树中无右孩子的结点的个数是?


题目

在二叉树中有两个结点m和n,如果m是n的祖先,可以找到从m到n的路径的遍历方式是?

这道题想了我很久,答案是 后序遍历
似乎有点难以理解,试想先序遍历、中序遍历、层次遍历都会遍历到m和n啊,层次遍历和路径无关,自然不选,但是先序和中序为何不行?

这就得先看清楚,题目中所写为 m是n的祖先,祖先可不仅仅只能是父节点。如果是父节点,那么不管哪一种都好说。而祖先的话,试想 n是m的第18代儿子,假设又是满二叉树,天呐,从记录下m开始到找到n,中间可能性有多少?2的18次方种可能,显然全部记录下来然后从中选一个是不现实的吧,所以从上往下找,这种思路本就是不可行的。(没说清楚?和这个问题很像,可以参考:戳)打个更简单的比方,一个皇帝想从几十亿的人中找到你是很难的,但是你想找那个皇帝,却是很简单的。

而既然排除了从上往下,也就排除了先序和中序,那后序为什么可以呢?因为后序遍历,无论是在左子树还是右子树,在返回的路上,都必然会经过祖先节点,所以,不管是不是递归的方法,都可以找得到这条路径。
非递归求解该问题的伪代码见第八题,只要从栈中提出n,则栈里面剩下的就是从根节点到n的路径节点。

题目6:

线索二叉树是一种( C )结构?
A. 逻辑
B. 逻辑和存储
C. 物理
D. 线性

题目7:

()的遍历仍需要栈的支持
A. 前序线索树
B. 中序线索树
C. 后序线索树
D. 所有线索树

这是一道很简单的题目,显然选C,因为后序线索树可能不能根据线索找到直接后继节点。
这里小结一下:
先序线索二叉树可以求先序后继
先序线索二叉树不可以求先序前驱
中序线索二叉树可以求中序后继
中序线索二叉树可以求中序前驱
后序线索二叉树不可以求后序后继
后序线索二叉树可以求后序前驱

后序遍历二叉树,如果使用递归很简单,就三五句话

对于一个二叉树,如下图所示:

我们可以有下面的假设,设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2

那么就有:n0+n1+n2=n

又由于除了根节点以外,每一个结点都占有一个边,
那么就有:n-1=2n2+n1

综合上面的两个公式得到:
叶子结点和二度结点数目关系:n0=n2+1


如果这是一个完全二叉树,那么一度结点的个数是有限的,要么为0要么为1。所以可以最后得到结点总数目和叶子结点的关系:

(1)当n1=0时,n=2n0-1所以n0=(n+1)/2。这里的n为奇数。

(2)当n1=1时,n=2n0所以n0=n/2。这里的n为偶数。

综上所述:
对于完全二叉树,叶子结点和结点总数的关系是:
一个具有n个节点的完全二叉树,其叶子节点的个数n0为: (n+1)/2 向下取整。


题目8:

含有二十个节点的平衡二叉树的最大深度为()
A. 4 B. 5 C. 6 D. 7

这道题涉及到的就是平衡二叉树里的一个规律:
假设以Nh表示深度为h的平衡树中含有的最少节点数,那么N0 = 0 ,N1 = 1, N2 = 2,并且有Nh = Nh-1 + Nh-2 + 1
所以这道题很明显了,N0 = 0, N1 = 1, N2 = 2, N3 = 4, N4 = 7, N5 = 12, N6 = 20
所以选 C

题目10:

画出一个二叉树,使它既满足大根堆的要求又满足二叉排序树的要求

这道题看似是一道开放性的题,所以看着觉得很奇怪。然而这是因为我不知道大根堆是什么东西的原因。
所谓大根堆,下面是百度百科的解释:

最大堆是堆的两种形式之一。
根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆(大顶堆)。
大根堆要求根节点的关键字既大于或等于左子树的关键字值,又大于或等于右子树的关键字值。

而且,大根堆还要求树是完全二叉树。
数据结构老师没教过堆排序的弱渣飘过
然后就很简单了,首先,根节点比左右节点都大,而且二叉排序树要求根节点比右节点小,那么没有右节点就得了。然后因为又要求必须是完全二叉树,所以这棵树只能有两个节点,一个根节点,一个是根节点的左节点。
所以这棵树是唯一的!!!
本以为是唯一的,但是经道友指点,还可以是只有一个根节点的情况,那么就是这两种情况啦!

相关文章

  • 关于树的几类计算

    求解方法归纳:(1)求解二叉树中节点个数的方法。非空二叉树上叶子结点数等于双分支结点数加1,即在一颗二叉树中,所有...

  • 关于银行分几类?

    对于银行大家应该都不陌生,但是我国有哪些种类的银行呢? 我们能看到的银行大致可以分为三类: 中央银行 也就是中国人...

  • 工程投资及还房贷的财务计算

    大到工程投资计算,小到我们日常生活中的房贷偿还上,都会遇到如下的几类等值计算,为了让大家更好地知道源头及在生活工作...

  • Linux 内存管理

    >计算机系统中有几类存储设备:cache、内存、外存。cache的存取速度最高,可以和CPU匹配,因此其代价最高,...

  • 史上最全编程语言列表,你掌握了哪些?

    摘要: 计算机编程语言可用于将指令传达给计算机。下面可能是史上最全编程语言列表,我将它们分为以下几类,你掌握了哪些...

  • [LeetCode] Overlapping/Non-Overl

    LeetCode里面关于Overlapping/Non-Overlapping的主要有一下几类: 寻找重叠/非重叠...

  • 聊algo

    algo(计算) -> 会关注计算的步骤数 -> 不同的结构会影响步数 线性表(数组,链表) 树(树,二叉树) ...

  • 树结构

    树的内部节点:非叶子节点树的外部节点:叶子节点 如何计算一个树的深度和高度 计算树的深度 假设p是树t中的一个节点...

  • 二叉树相关的知识点

    关于二叉树高度的计算,通过递归的方式得到,跳出递归的条件是,当结点是None的时候,高度为0

  • SQL操作指南五(函数)

    函数 函数的种类函数大致分为以下几类:①算术函数(用以进行数值计算)②字符串函数(用以进行字符串操作)③日期函数(...

网友评论

      本文标题:关于树的几类计算

      本文链接:https://www.haomeiwen.com/subject/azsvwltx.html