我已经能够创建一个证明,表明树中的最大总节点数等于n = 2 ^(h + 1) - 1,逻辑上我知道二叉树的高度是log n(可以把它画出去看)但是我在构建一个正式的证据时遇到了麻烦,这个证据表明一棵树有n片叶子的树至少有“log”。我遇到或能够组合在一起的每个证据总是处理完美的二叉树,但我需要适合任何情况的东西。有什么提示可以引导我朝着正确的方向前进吗?
答案 0 :(得分:5)
引理:高度np.append(train_generator.classes)
树中的树叶数量不超过h
。
证明:证据是2^h
上的归纳。
基本案例:对于h
,树只包含一个根节点,也是一个叶子;这里,h = 0
,视需要而定。
归纳假设:假设所有高度n = 1 = 2^0 = 2^h
或更低的树都少于k
个节点。
归纳步骤:我们必须证明高度为2^k
的树木的叶子不超过k+1
。考虑根的左右子树。这些树的高度不超过2^(k+1)
,比整棵树的高度少一棵。因此,根据归纳假设,每个叶子最多有k
个叶子。由于叶子的总数只是根子树叶子数的总和,我们根据需要有2^k
。这证明了这一说法。
定理:带有n = 2^k + 2^k = 2^(k+1)
树叶的二叉树的高度至少为n
。
我们在引理中已经注意到,仅由根节点组成的树有一个叶子和高度为零,因此在这种情况下声明是正确的。对于具有更多节点的树,证明是矛盾的。
让log(n)
n = 2^a + b
。现在,假设树的高度小于0 < b <= 2^a
,这与我们打算证明的定理相反。然后高度最多为a + 1
。通过引理,高度为a
的树中的叶子的最大数量为a
。但是我们的树有2^a
个叶子,因为n = 2^a + b > 2^a
;矛盾。因此,高度小于0 < b
的假设必定是不正确的。这证明了这一说法。