二叉树数据结构

时间:2010-11-25 18:33:27

标签: binary-tree

任何人都可以证明严格二叉树中的节点数是2n-1,其中n是叶节点的数量吗?

7 个答案:

答案 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个 可能的配置:

  • 2个子节点
  • 1个孩子和1个内部节点
  • 2个内部节点

所有三种配置都意味着内部节点连接到另外两个节点。明确地说 排除节点连接到单个子节点的情况,如:

   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";
}
相关问题