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

关于树的几类计算

作者: 喜忧参半 | 来源:发表于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:

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

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

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

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

    相关文章

      网友评论

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

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