二进制搜索树高度h的构造

时间:2015-08-08 21:31:18

标签: algorithm performance tree binary-search-tree backtracking

假设前n个自然数作为BST的关键,我如何确定所有可能树的根节点,其高度为' h'

我已经想出了一个强力方法,我用n个节点构造了所有可能的树,然后选择了高度为h的树,但它的时间复杂度几乎为O(n!)。有人可以建议一种更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

问题陈述。根据自然数nh,确定root中的所有元素1..nroot1..n高度为h的二叉搜索树的根。

解决方案。我们可以在1..n上从1..n中的任意数字开始构建简并二元搜索树,方法是在root处将其拆分。这会将旧解决方案的下限更改为h-1,而上限保持不变,呈现完整边界如下:

 h-1 <= max(root-1, n-root) <= 2^h - 1

旧解决方案(仅对完整二进制树正确)。 A full binary tree with height h has at least 2h+1 nodes, and at most 2^(h+1)-1 nodes。很容易看出这些边界很紧,不仅适用于二叉树,也适用于二叉搜索树。特别是,它们适用于left的{​​{1}}和right子树。由于这是root上的二叉搜索树,因此1..n恰好包含元素left,而1..(root-1)恰好包含元素right。< / p>

这意味着以下是必要且充分的条件:子树(root+1)..nleft更大必须满足不等式

right

换句话说,2*(h-1) + 1 <= nodes(subtree) <= 2^h - 1 的可能值恰好是root满足

的所有值
1..n

更新。我盲目地看着我在维基百科上发现的不平等,却没有意识到它只适用于完整的二叉树。

相关问题