Algorithm 给定一个数n和k,有多少具有k片叶子的平衡(高度平衡)二叉树?

Algorithm 给定一个数n和k,有多少具有k片叶子的平衡(高度平衡)二叉树?,algorithm,Algorithm,我们有n个节点和k个数,我们如何计算(例如,使用动态规划)具有n个节点和k个叶子的所有高度平衡树 (高度平衡二叉树是指叶高最大差值为1的树。)关于这些树的假设/定义: 有n个“节点”;每个孩子要么没有孩子,要么只有一个左孩子,要么只有一个右孩子,要么一个左孩子和一个右孩子 有k个“叶子”,意思是没有子节点的节点 如果树的高度称为h,则子节点少于两个的节点的深度都等于h或h–1。(这是平衡要求。) 树完全由其结构定义(节点没有子节点、左子节点、右子节点、左子节点和右子节点) 鉴于上述情况,该树

我们有n个节点和k个数,我们如何计算(例如,使用动态规划)具有n个节点和k个叶子的所有高度平衡树


(高度平衡二叉树是指叶高最大差值为1的树。)

关于这些树的假设/定义:

  • 有n个“节点”;每个孩子要么没有孩子,要么只有一个左孩子,要么只有一个右孩子,要么一个左孩子和一个右孩子
  • 有k个“叶子”,意思是没有子节点的节点
  • 如果树的高度称为h,则子节点少于两个的节点的深度都等于h或h–1。(这是平衡要求。)
  • 树完全由其结构定义(节点没有子节点、左子节点、右子节点、左子节点和右子节点)

鉴于上述情况,该树由高度为h–1的完整二叉树加上底部的一个或多个叶节点组成。叶的总数等于我们添加的叶的数量,加上上上一级中没有添加任何子级的节点的数量

因此,在高层,算法如下所示:

  • 计算到底层中有多少个节点,以及上面的层中有多少个节点。(这仅取决于n;例如,高度为6的完整二叉树有26+1–1=127个节点,因此,如果n=130,则底层有3个节点,底层第二个有64个节点。)
  • 计算第二层到底层中有多少节点没有子节点(即k减去底层节点的数量),以及其余节点中有多少节点有一个子节点而不是两个子节点(使用先前获得的结果)
  • 然后,可以通过组合数学确定可能的树的总数。具体而言,它是这三个值的乘积:
    • 从第二行到底行的节点中选择哪些节点没有子节点的方法的数量:(第二行到底行的节点)nCr(第二行到底行的节点没有子节点)
    • 从第二行到底行的其余节点中选择哪些节点有一个子节点的方法的数量:(第二行到底行的节点有一个或两个子节点)nCr(第二行到底行的节点有一个子节点)
    • 从具有一个子项的第二行到下一行的节点中,选择哪些节点具有左子项,哪些节点具有右子项的方法的数量:2(具有一个子项的第二行到下一行的节点)

在执行此操作时,一定要考虑到没有具有给定n和k值的树的可能性;对于任何给定的n,对于满足上述约束的树,实际上只可能有k的某一范围的值。如果k超出该范围,则实现需要返回0。

什么是平衡标准?我指的是高度平衡二叉树,其中节点高度的最大差值为1。因此,编辑您的问题并添加此重要信息。您需要实际的树,或者只是他们的数字?数字与递归方程你的解决方案是不正确的。在第一步中,我们如何“计算到底层有多少节点,以及上面层有多少节点”,这并不取决于您的n。你应该考虑平衡树。你是如何计算这一步的?@M2E67:Re:“你的解决方案不正确”:请提供证据。(请注意,您的问题描述有点模糊,因此我不得不对您的意思做出最好的猜测。如果您的意思有点不同,请更明确地写出您的问题。)“该树由一个高度为h–1的完整二叉树加上底部的一个或多个叶节点组成。”-此语句错误。看这个:@VaibhavMaheshwari:你好像误解了什么。我的答案不是关于AVL树。您的图像与我列出的第三个“假设/定义”不兼容。哎呀!很抱歉事实上,我在寻找类似AVL树的东西,并以这种方式阅读。没有正确阅读问题。