任何人都可以证明严格二叉树中的节点数是2n-1,其中n是叶节点的数量吗?
答案 0 :(得分:3)
通过归纳证明。 基本情况是你有一片叶子。假设对于k叶是真的。然后你应该证明k + 1。所以你得到了新的节点,他的父节点和他的另一片叶子(根据严格的二叉树的定义)。剩下的叶子是k-1然后你可以使用归纳假设。所以节点的实际数量是2 *(k-1)+ 3 = 2k + 1 == 2 *(k + 1)-1。
答案 1 :(得分:2)
我猜你真正想要的就是证明深度是log 2 (N),其中N是节点数。在这种情况下,答案很简单:对于任何给定深度D,节点数为2 D 。
编辑:回应编辑过的问题:同样的事实非常适用。由于任意深度的节点数为2 D ,因此树上的节点数量为2 D-1 + 2 D-2 + ... 2 0 = 2 D -1。因此,平衡二叉树中的节点总数为2 D + 2 D -1。如果你设置n = 2 D ,那么你已经完整的圆圈回到原来的等式。
答案 2 :(得分:2)
按照基础知识,假设总共有x个节点,那么我们有n个节点的度数为1(叶子),1个度为2(根),x-n-1为度数3(内部节点) 作为具有x个节点的树将具有x-1个边。所以总结
n + 3 *(x-n-1)+ 2 = 2(x-1)(等于总度数)
求解x得到x = 2n-1
答案 3 :(得分:1)
我认为您正在尝试制作一个证据:N = 2L - 1
其中L
是数字
叶节点和N
是二叉树中的节点总数。
对于这个公式来说,你需要对二进制文件进行一些限制 树被建造。每个节点都是一个叶子,这意味着它没有子节点,或者 它是一个内部节点。内部节点有3个 可能的配置:
所有三种配置都意味着内部节点连接到另外两个节点。明确地说 排除节点连接到单个子节点的情况,如:
o
/
o
非正式证明
从一片叶子的最小树开始:L = 1,N = 1替换为N = 2L - 1并且看到 公式成立(1 = 1,到目前为止一直很好)。
现在向树中添加另一个最小块。要做到这一点,你需要添加另外两个节点和 树看起来像:
o
/ \
o o
请注意,您必须成对添加节点以满足前面所述的限制。
添加一对节点总是会增加
一个叶子(两个新的叶子节点,但是当它变成一个内部节点时你松开一个)。节点增长
系列进展:1,3,5,7,9 ...但叶子生长是:1,2,3,4,5 ...这就是为什么配方
N = 2L - 1
适用于此类树。
你可能会使用数学归纳法来构建一个正式的证据,但这适用于我。
答案 4 :(得分:1)
通过数学归纳证明:
对于n = 1,在具有n个叶子节点的严格二叉树中存在(2n-1)个节点的语句为真。 {只有一个节点的树,即根节点}
让我们假设对于具有n-1个叶节点的树,该语句为真。因此树具有2(n-1)-1 = 2n-3个节点
要形成具有n个叶节点的树,我们需要将2个子节点添加到上述树中的任何叶节点。因此,节点总数= 2n-3 + 2 = 2n-1。
因此,证明了
答案 5 :(得分:1)
To prove: A strictly binary tree with n leaves contains 2n-1 nodes.
Show P(1): A strictly binary tree with 1 leaf contains 2(1)-1 = 1 node.
Show P(2): A strictly binary tree with 2 leaves contains 2(2)-1 = 3 nodes.
Show P(3): A strictly binary tree with 3 leaves contains 2(3)-1 = 5 nodes.
Assume P(K): A strictly binary tree with K leaves contains 2K-1 nodes.
Prove P(K+1): A strictly binary tree with K+1 leaves contains 2(K+1)-1 nodes.
2(K+1)-1 = 2K+2-1
= 2K+1
= 2K-1 +2*
* This result indicates that, for each leaf that is added, another node must be added to the father of the leaf , in order for it to continue to be a strictly binary tree. So, for every additional leaf, a total of two nodes must be added, as expected.
答案 6 :(得分:0)
int N = 1000; insert here the value of N
int sum = 0; // the number of total nodes
int currFactor = 1;
for (int i = 0; i< log(N); ++i) //the is log(N) levels
{
sum += currFactor;
currFactor *= 2; //in each level the number of node is double than the upper level
}
if(sum == 2*N - 1)
{
cout<<"wow that the number of nodes is 2*N-1";
}