Algorithm 证明二叉树中的节点数比叶子数少一个
“二叉树中的完整节点是具有两个子节点的节点。请证明A中的完整节点数(非空) 二叉树比叶子的数目少一个“ 我遇到了这个问题,我不知道它在问我什么,因为我们在课堂上根本没有做过这样的问题。它要求我做什么?如何“证明”它 多谢各位 编辑:以下是我所做的。我不太确定这是否正确,但问题是我试图用英语而不是数学来解释它 “考虑到存在单个节点的基本情况,这意味着树只有一片叶子,没有带两个子节点的节点。这比树叶的数量少一片。如果将节点添加到具有0个子节点的节点,则具有两个子节点的单个节点和叶数不会发生变化。如果将节点添加到具有子节点的节点,则具有两个子节点的节点数和叶数将增加1。总之,将节点添加到现有节点是一项不可能的壮举。二叉树中节点之间的差值始终小于叶数,因为尝试将节点添加到树中不会改变,或者会将树和叶数增加1。” 对于完整的树:Algorithm 证明二叉树中的节点数比叶子数少一个,algorithm,binary-tree,Algorithm,Binary Tree,“二叉树中的完整节点是具有两个子节点的节点。请证明A中的完整节点数(非空) 二叉树比叶子的数目少一个“ 我遇到了这个问题,我不知道它在问我什么,因为我们在课堂上根本没有做过这样的问题。它要求我做什么?如何“证明”它 多谢各位 编辑:以下是我所做的。我不太确定这是否正确,但问题是我试图用英语而不是数学来解释它 “考虑到存在单个节点的基本情况,这意味着树只有一片叶子,没有带两个子节点的节点。这比树叶的数量少一片。如果将节点添加到具有0个子节点的节点,则具有两个子节点的单个节点和叶数不会发生变化。如果
h = log (n+1)
以及
节点数=2*完整节点+根节点
即:
2 * fn +1 = n
而且
l = 2^(h-1)
因为除了根以外的每一行中的节点数是前一行的两倍
所以
或者
从以前的扣除额中:
2 * fn + 1 = 2 * l - 1
或者
对于完整的树:
h = log (n+1)
以及
节点数=2*完整节点+根节点
即:
2 * fn +1 = n
而且
l = 2^(h-1)
因为除了根以外的每一行中的节点数是前一行的两倍
所以
或者
从以前的扣除额中:
2 * fn + 1 = 2 * l - 1
或者
你的课程所称的“二叉树”在数学上被称为有根二叉树。只有有根树才有子节点的概念,在无根树中没有父子层次结构,所有节点都是相等的。该语句只适用于非空根树
这里有一个详细的归纳证明
- L'是T'中的一个叶。然后T的叶数与T'相同(因为添加了一个叶L,而一个节点L'失去其叶状态)。T和T'中的完整节点数相同(因为相同的节点已满)
- L'在T'中正好有一个子节点。然后T比T'多了一个叶(因为L是一个新叶),并且比T'多了一个完整节点(因为L'是一个新的完整节点)
- 将一个叶与其父节点折叠。此时叶数与完整节点数之间的差值不会改变
- L'是T'中的一片叶子。然后,T的叶数与T相同(因为添加了一个叶,L,而一个节点,L'失去其叶状态)。T和T中的完整节点数相同(因为相同的节点已满)
- L'在T'中正好有一个孩子'。然后T比T多了一个叶(因为L是一个新叶),比T多了一个完整节点(因为L是一个新的完整节点)李>
- 折叠一个叶及其父节点。此时,叶数和完整节点数之间的差异不会改变
这个答案并不试图解释a是什么,也不提供构造证明的一般方法。关于二叉树有很多阅读资料。在纸上画最小二叉树,并目视检查条件。尝试添加节点并进一步检查。这是一个数学问题。“如何构造数学证明”是一个非常基本的问题,不太适合这个网站。不是真正的堆栈溢出问题2。你到现在都干了些什么?我想简单的谷歌搜索会让你得到正确的答案