在二叉树中,对于每个节点,左右节点数之差

Posted

技术标签:

【中文标题】在二叉树中,对于每个节点,左右节点数之差【英文标题】:In a binary tree, for every node the difference between the number of nodes in the left and right 【发布时间】:2020-04-22 22:39:03 【问题描述】:

在二叉树中,对于每个节点,左右子树的节点数之差最多为2。如果树的高度为h>0,则树中的最小节点数为.

我的理解:该树中的总节点数 = 左子树节点数 + 右子树节点数 + 1(根节点)

= 左子树节点数 + ( 左子树节点数 - 2 ) + 1

= 左子树节点数 + 左子树节点数 - 2 + 1

= 2 * 左子树节点数 - 1

H(n) = 2*H(n-1)-1 在这里,我使用替换解决了它,但是当我输入 h(0)=1 时,它只给出 1 作为答案而不是 H。你能帮我解释一下为什么我不能把 h(0)=1 作为我的基本条件,因为它也满足给定的二叉树。

【问题讨论】:

【参考方案1】:

您的重复假设您的树有节点。

H(n) = 2*H(n-1) - 1 假定 H(n-1) 已定义。但是对于 n=0,H(n-1) = H(-1) 这没有意义。所以你需要为H(0) 建立你的基本案例,你可以用一个简单的参数来做。

因此,当 n = 0 和 H(n) = 2*H(n-1) - 1 如果 n > 0 时,您的重复将是 H 的值。

另外,你应该在你的论点中使用 >=。左子树实际上可能更大。

没有。左子树节点数 + 没有。右子树节点数 + 1 >= 否。左子树节点数 + (左子树节点数 - 2) + 1

【讨论】:

【参考方案2】:

当 n=1 时,在最小的情况下,从根开始的左子树有 1 个节点,但右子树有 0 个节点,而不是您的推理所建议的 -1 个节点。

对于 n>1,你的推理是正确的。

所以你需要假设 H(1)=2,然后你会得到正确的结果。

【讨论】:

以上是关于在二叉树中,对于每个节点,左右节点数之差的主要内容,如果未能解决你的问题,请参考以下文章

数据结构基础

使用递归 DFS 在二叉树中查找节点

Swift 数据结构 - 二叉树(Binary Tree)

#yyds干货盘点# 面试必刷TOP101:在二叉树中找到两个节点的最近公共祖先

求代码:实现二叉树中所有结点左右子树的交换

干货|平衡二叉树