【问题标题】:Proof that a binary tree with n leaves has a height of at least log n证明具有 n 个叶子的二叉树的高度至少为 log n
【发布时间】:2018-01-30 17:26:54
【问题描述】:
我已经能够创建一个证明,表明树中的最大节点总数等于 n = 2^(h+1) - 1,并且从逻辑上我知道二叉树的高度是 log n (可以把它画出来看看),但我很难构建一个正式的证明来证明一棵有 n 片叶子的树“至少”有 log n。我遇到或能够组合在一起的每一个证明总是处理完美的二叉树,但我需要任何情况下的东西。有什么提示可以引导我朝着正确的方向前进吗?
【问题讨论】:
标签:
logic
binary-tree
nodes
proof
induction
【解决方案1】:
引理:高度为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 + b0 < b <= 2^a。现在,假设树的高度小于a + 1,这与我们打算证明的定理相反。那么高度最多为a。根据引理,高度为a 的树中的最大叶子数为2^a。但是我们的树有n = 2^a + b > 2^a 叶子,因为0 < b;一个矛盾。因此,高度小于a+1 的假设一定是不正确的。这证明了这一说法。