【问题标题】:Given a number n, how many balanced binary trees (not binary search trees) are there?给定一个数 n,有多少个平衡二叉树(不是二叉搜索树)?
【发布时间】:2014-03-22 19:37:06
【问题描述】:

本题中balanced的定义是

它的左子树的节点数和它的节点数 右子树几乎相等,这意味着它们的差异不 大于一

如果给定一个n作为节点总数,有多少这样的树?


如果我们用height 替换the number of nodes 会怎样?给定height,有多少棵高度平衡的树?

【问题讨论】:

  • 家庭作业?尝试为具有 2*N 和 2*N+1 个节点的树的数量写下一个循环公式(也用于高度为 h+1 的树的数量)。您可能需要考虑具有 N=2^k-1 个节点的树的数量。
  • @n.m.不,这不是家庭作业,只是自我提升。是的,我试过了,但它是两种场合的组合。我想知道是否有一个独特的方程,我给出 n 并直接得到 ans
  • @Jackson - 您的所有条件似乎都类似于 AVL 树。你说的是 AVL 树吗?
  • @arunb2w AVL树是第二种定义,高度差最多为1,而不是初始定义的节点数最多相差1。

标签: algorithm data-structures tree binary-tree binary-search-tree


【解决方案1】:

好吧,差异只会在最后一级产生,因此您只需找出应该为该一级留下多少节点,并考虑所有可能的组合。拥有n 节点,您知道高度应该是floor(log(n)),因此深度k = floor(log(n)) - 1 的同一棵树是完全平衡的,因此您知道需要(m = sum(i=0..k)2^i)节点,因此n-m 节点留给最后一级。平衡二叉树的一些定义强制“所有节点左对齐”,在这种情况下,很明显只有一种可能性,没有这个约束你有2^floor(log(n))的组合选择n-m,因为你有选择您将分配给节点的2^floor(log(n)) 可能插槽中的哪个,强制分配总共n-m 节点。

对于身高故事,您考虑2^floor(log(n)) 选择i 的组合总和,因为i 从1 变为2^floor(log(n))。您考虑在最后一级有 1 个节点,然后是 2 个节点的所有可能性,直到您没有使其成为完全平衡的二叉树,因此分配了所有 2^floor(log(n)) 插槽。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2016-06-05
    相关资源
    最近更新 更多