Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 证明二叉树中的节点数比叶子数少一个_Algorithm_Binary Tree - Fatal编程技术网

Algorithm 证明二叉树中的节点数比叶子数少一个

Algorithm 证明二叉树中的节点数比叶子数少一个,algorithm,binary-tree,Algorithm,Binary Tree,“二叉树中的完整节点是具有两个子节点的节点。请证明A中的完整节点数(非空) 二叉树比叶子的数目少一个“ 我遇到了这个问题,我不知道它在问我什么,因为我们在课堂上根本没有做过这样的问题。它要求我做什么?如何“证明”它 多谢各位 编辑:以下是我所做的。我不太确定这是否正确,但问题是我试图用英语而不是数学来解释它 “考虑到存在单个节点的基本情况,这意味着树只有一片叶子,没有带两个子节点的节点。这比树叶的数量少一片。如果将节点添加到具有0个子节点的节点,则具有两个子节点的单个节点和叶数不会发生变化。如果

“二叉树中的完整节点是具有两个子节点的节点。请证明A中的完整节点数(非空) 二叉树比叶子的数目少一个“

我遇到了这个问题,我不知道它在问我什么,因为我们在课堂上根本没有做过这样的问题。它要求我做什么?如何“证明”它

多谢各位

编辑:以下是我所做的。我不太确定这是否正确,但问题是我试图用英语而不是数学来解释它

“考虑到存在单个节点的基本情况,这意味着树只有一片叶子,没有带两个子节点的节点。这比树叶的数量少一片。如果将节点添加到具有0个子节点的节点,则具有两个子节点的单个节点和叶数不会发生变化。如果将节点添加到具有子节点的节点,则具有两个子节点的节点数和叶数将增加1。总之,将节点添加到现有节点是一项不可能的壮举。二叉树中节点之间的差值始终小于叶数,因为尝试将节点添加到树中不会改变,或者会将树和叶数增加1。”

对于完整的树:

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
或者

你的课程所称的“二叉树”在数学上被称为有根二叉树。只有有根树才有子节点的概念,在无根树中没有父子层次结构,所有节点都是相等的。该语句只适用于非空根树

这里有一个详细的归纳证明

  • 对于单节点树,该语句显然是正确的:它有一个叶(根),没有完整的节点
  • 归纳步骤。假设该语句适用于所有有N个节点的有根二叉树,适用于某些正整数N。给定一个有N+1个节点的树T,选择一个叶L并将其删除。结果是一个有N个节点的树T',该语句适用于该树。假设L的父级为L'。有两种情况:

    • L'是T'中的一个叶。然后T的叶数与T'相同(因为添加了一个叶L,而一个节点L'失去其叶状态)。T和T'中的完整节点数相同(因为相同的节点已满)
    • L'在T'中正好有一个子节点。然后T比T'多了一个叶(因为L是一个新叶),并且比T'多了一个完整节点(因为L'是一个新的完整节点)
    在这两种情况下,叶数和完整节点数之间的差异都不会改变,因此该语句适用于具有N+1个节点的所有有根二叉树

  • 根据归纳法原理,该语句适用于所有正整数N

    此证明的一个更短(但仍然完全可以接受)版本如下:

    • 将一个叶与其父节点折叠。此时叶数与完整节点数之间的差值不会改变
    这个答案并不试图解释a是什么,也不提供构造证明的一般方法。

    你的课程称之为“二叉树”在数学上被称为有根二叉树。只有根树才有子节点的概念,在非根树中没有父子层次结构,所有节点都是相等的。该陈述仅适用于非空根树

    这里有一个详细的归纳证明

  • 诱导基。对于单节点树,该语句显然是正确的:它有一个叶(根),没有完整的节点
  • 诱导步骤。假设该语句适用于所有有N个节点的有根二叉树,适用于某些正整数N。给定一个有N+1个节点的树T,选择一个叶L并将其删除。结果是一个具有N个节点的树T',对于该树,该语句为true。假设L的父母是L。有两种情况:

    • L'是T'中的一片叶子。然后,T的叶数与T相同(因为添加了一个叶,L,而一个节点,L'失去其叶状态)。T和T中的完整节点数相同(因为相同的节点已满)
    • L'在T'中正好有一个孩子'。然后T比T多了一个叶(因为L是一个新叶),比T多了一个完整节点(因为L是一个新的完整节点)
    在这两种情况下,叶数和完整节点数之间的差异都不会改变。因此,该语句适用于具有N+1个节点的所有有根二叉树

  • 根据归纳法原理,该语句适用于所有正整数N

    此证明的一个更短(但仍然完全可以接受)版本如下:

    • 折叠一个叶及其父节点。此时,叶数和完整节点数之间的差异不会改变

    这个答案并不试图解释a是什么,也不提供构造证明的一般方法。

    关于二叉树有很多阅读资料。在纸上画最小二叉树,并目视检查条件。尝试添加节点并进一步检查。这是一个数学问题。“如何构造数学证明”是一个非常基本的问题,不太适合这个网站。不是真正的堆栈溢出问题2。你到现在都干了些什么?我想简单的谷歌搜索会让你得到正确的答案