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

Computer science 在实现二叉搜索树(BST)时,如何应用分而治之的方法?,computer-science,Computer Science,我不熟悉二进制搜索树,但有人告诉我,在实现它们时,应用分而治之的方法非常有用。例如,我如何应用这种方法来找到BST的高度?这个名字来自军事科学,意思是你把敌人分成几部分,然后分别征服。然而,在算法中,通常您并不是试图独立完成每一部分,而是希望生成一个单一的答案。所以模板有点不同。下面是分而治之的过程: 把问题分成几部分 通过递归地将整个过程应用于每一块来求解每一块 以某种方式将这些解决方案组合起来,得出答案 诀窍是想出一种巧妙的方法来划分问题,以便将解决方案结合起来。实际上,你不需要担心如何解决

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

这个名字来自军事科学,意思是你把敌人分成几部分,然后分别征服。然而,在算法中,通常您并不是试图独立完成每一部分,而是希望生成一个单一的答案。所以模板有点不同。下面是分而治之的过程:

  • 把问题分成几部分
  • 通过递归地将整个过程应用于每一块来求解每一块
  • 以某种方式将这些解决方案组合起来,得出答案
  • 诀窍是想出一种巧妙的方法来划分问题,以便将解决方案结合起来。实际上,你不需要担心如何解决每个小问题,因为整个算法就是解决方案!这有点神奇,但随着您对递归的熟悉,它会变得自然

    让我们来解决你的问题,找到一个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));
    }
    

    对不起,你能更具体地回答你的问题吗?这是可以在维基百科上找到的。它涵盖了此数据结构的遍历。