[英]Binary Search Tree Construction of height h
给定前n个自然数作为BST的键,如何确定高度为'h'的所有可能树的根节点。
我已经想出了一种蛮力方法,其中我用n个节点构造了所有可能的树,然后选择了高度为h但时间复杂度接近O(n!)的树。 有人可以建议一种更好的方法吗?
问题陈述。 鉴于自然数n
和h
,确定到底的所有元素root
在1..n
使得root
是在二叉搜索树的根1..n
高度的h
。
解决方法 。 我们可以从1..n
任何数字开始在1..n
上构建简并的二叉搜索树,方法是将其在root
拆分。 这会将下限从旧解决方案更改为h-1
,而上限保持不变,从而呈现出完整的边界,如下所示:
h-1 <= max(root-1, n-root) <= 2^h - 1
旧的解决方案(仅对于完整的二叉树正确)。 高度为h
完整二叉树至少具有2h+1
节点,并且最多具有2^(h+1)-1
节点 。 不难看出,不仅对于二叉树,而且对于二叉搜索树,这些界限都是紧密的。 特别是,它们适用于left
和right
您的子树root
。 由于这是1..n
上的二叉搜索树,因此您将使left
的元素正好包含元素1..(root-1)
,而right
的元素right
包含元素(root+1)..n
。
这意味着以下条件既是必要条件,也是充分条件: left
和right
的较大子树必须满足不等式
2*(h-1) + 1 <= nodes(subtree) <= 2^h - 1
换句话说, root
的可能值恰好是1..n
满足的所有值
2*(h-1) + 1 <= max(root-1, n-root) <= 2^h - 1
更新。 我盲目地看了我在Wikipedia上发现的不平等,却没有意识到它仅适用于完整的二叉树。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.