我不熟悉二进制搜索树,但我被告知在实现它们时应用分而治之的方法很有用。我如何应用这种方法,例如,找到BST的高度?
答案 0 :(得分:1)
诀窍是提出一种巧妙的方法来分解问题,以便可以组合解决方案。您不需要真正担心如何解决每个较小的部分,因为整个算法是解决方案!这有点神奇,但随着你越来越熟悉递归而变得很自然。
让我们来解决你找到BST高度的问题。假设通过魔法以某种方式你可以找到左子树的高度和右子树的高度。一旦你有了这两个值,你能想出一种方法来组合它们来找到整个BST的高度吗?如果您没有立即看到答案,请考虑您熟悉的两个整数的所有函数,为您提供想法。
你需要一个基本案例来进行递归,但除此之外我们有完整的解决方案,不管你信不信:
int BST_height(root) {
if(root is a leaf node)
return 1;
else
return mystery_function(BST_height(root.left), BST_height(root.right));
}