在实施二叉搜索树(BST)时如何应用分而治之的方法?

时间:2011-11-09 21:14:39

标签: computer-science

我不熟悉二进制搜索树,但我被告知在实现它们时应用分而治之的方法很有用。我如何应用这种方法,例如,找到BST的高度?

1 个答案:

答案 0 :(得分:1)

“分而治之”这个名字来自军事科学,意味着你将敌人分成碎片并分别征服。但是,在算法中,您通常不会尝试自己完成每个部分 - 相反,您希望生成单个答案。所以模板有点不同。以下是分而治之的:

  1. 将问题分解成碎片。
  2. 通过递归地将整个过程应用于每个部分来解决每个单独的部分。
  3. 以某种方式结合解决方案以产生答案。
  4. 诀窍是提出一种巧妙的方法来分解问题,以便可以组合解决方案。您不需要真正担心如何解决每个较小的部分,因为整个算法是解决方案!这有点神奇,但随着你越来越熟悉递归而变得很自然。

    让我们来解决你找到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));
    }