教你一秒钟得出 N个节点的完全二叉树有多少个叶子节点 / 度为1或2的节点个数

没耐心的同学们可以直接拉到最底下看结论,有兴趣的话可以浏览全篇文章

完全二叉树的节点计算基本是几类,要么是求完全二叉树中的叶子节点个数或者度为1或者2的节点的个数。

其实这些问题根本上一一类问题,求解方法也是基本相同的。

先把题列出来:

一棵完全二叉树具有1000个结点,则此完全二叉树有多少个度为2的结点?

完全二叉树699个节点,则叶子节点有多少个?

已知完全二叉树有30个节点,则整个二叉树有多少个度为1的节点?

类似于此类问题,其实用公式都很好解决。先来分析一下公式:

我们假设完全二叉树有N个节点,度为0的节点(叶子结点)为N0 , 度为1的节点为N1 , 度为2的节点为 N2 。

我们可以得到公式一:

N = N0 + N1 + N2

求完全二叉树中所有节点的总度数可以得到公式二:

总度数 = 0*N0 + 1*N1 + 2*N2

总度数其实我们可以理解成二叉树的边数之和,除了根节点之外,每个节点头上都有一个边。

所以我们可以得到公式三:

总度数 = N - 1

公式合并可以得到公式四:

N0 = N2 + 1 

所以说这类问题,求解出来叶子结点的个数,度为2的节点的个数也就求解出来了(反之亦然)

那么N1呢?

其实熟悉完全二叉树定义的都应该知道,完全二叉树中度为1的节点只会是0个或者1个。

为什么呢?

不理解的话可以从满二叉树分析,满二叉树中只有叶子结点和度为2的节点,

而完全二叉树可以看成是满二叉树最后一层的节点从右至左连续的砍掉一些,

如果砍掉的节点个数是奇数,那么完全二叉树中度为1的结点个数为1

如果砍掉的节点个数是偶数,那么完全二叉树中度为1的结点个数为0

我们继续分析,完全二叉树不看最底层,上面实际上是个满二叉树。

若上面的满二叉树有k层,那么我们根据公式,满二叉树的结点个数是(2^k) -1,(2^k) -1必定是个奇数。

我们完全二叉树的总节点数N若是偶数,则最后一层的节点数必是奇数,则N1 = 1

N1 = 1
公式一:N = N0 + N1 + N2
公式四:N0 = N2 + 1

代入可以得到 N2 = N/2 - 1 

我们完全二叉树的总节点数N若是奇数,则最后一层的节点数必是偶数,则N1 = 0

N1 = 0
公式一:N = N0 + N1 + N2
公式四:N0 = N2 + 1

代入可以得到 N2 = (N - 1)/2 

总结一下:

我们以节点个数的奇偶的划分

节点个数为奇数,完全二叉树中度为1的节点为0个,度为2的节点个数为 (N-1)/2。

节点个数为偶数,完全二叉树中度为1的节点为1个,度为2的节点个数为   N/2 - 1。

其实非常好记忆,奇数就先 - 变成偶数再除以2,偶数直接除以2 再减一。

但是要注意我们这样直接算出来的是度为2的节点个数

最后根据 N0 = N2 + 1,N2求出来了,叶子结点的个数只需要加一就可以知道了。

发布了91 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42006733/article/details/104578337