BST

作者: Wilbur_ | 来源:发表于2021-07-13 10:23 被阅读0次

算法导论这本书真的确实很有帮助,你照着书上的代码打一遍就有助于你理解这种data structure是如何实现的。而且其实能更好的帮助你理解recursion的原理,因为书中很多data structure都是用recursion来实现的。而且你照着代码打一下的时候,可以先尝试自己打一遍,如果遇到问题在看书上是如何解决的。这样能让你更好的理解,或者说更好的发现自己思维中的漏洞。填补逻辑上的漏洞。

今天在实现BST的时候发现其实很多API method本身就是leetcode上面的题……这么一想leetcode就是在帮助你掌握实现BST的逻辑。更好的运用它。比如BST的floor() method 是为了找到一个小于等于(<=)当前key

  public Key floor(Key key) {
      Node x = floor(root, key);
      if (x == null) return null;
      return x.key;
  }
  private Node floor(Node x, Key key) {
    if (x == null) return null;
    int cmp = key.compareTo(x.key);
    if (cmp == 0) return x;
    // if the key is less than current node key, move to left subtree
    if (cmp < 0) return floor(x.left, key);
    // 这里是之前从来没见过的,脑子里没有说可以直接在加一个variable然后用它来存储搜索右子树最小key的结果
    //因为如果当前key > 当前node.key的时候,你不能直接返回,而需要找到右子树最小key才可以(floor的定义)
    Node t = floor(x.right, key);
    if (t != null) return t;
    return x;
  }

recursion本身思路还是清晰的,一开始可能有点麻烦,但是过一段时间之后就发现recursion实际上确实是更加方便。
BST删除节点确实挺难的,最重要的还是脑子里要形成图像。它本身核心思想还是通过一个临时指针指向要被删除的节点,然后把现在的指针指向右子树最小的节点,这时候把现在指针x的右指针(指向右子树)指向临时指针的右指针中最小的节点(通过deleteMin(t.right) 来实现,t.right 就是临时指针的右子树。再把x的左指针指向t.left 就是完成了删除操作。我觉得书中这张图还是很有用的


image.png

相关文章

  • 二叉搜索树(BST)

    BST简介 查询BST 插入和删除 #1. BST简介 BST(Binary Search Tree),二叉搜索树...

  • DLL ro BST BST to DLL

    已写bst to dll dll to bst

  • 二叉搜索树的节点删除

    BST示例代码如下: BST的元素删除 BST节点的前驱与后继搜索 某个BST节点的前驱,即为值比它小的最大的一个...

  • 108. Convert Sorted Array to Bin

    注意BST的格式,如何建立BST等的知识

  • LeetCode #96 #95 #108 #109 #173

    BST 切记,基本所有与BST有关的题目,都要用到一个BST的性质,那就是BST中序遍历有序性。 96. Uniq...

  • BST

    BST的优秀性质!All the sub-tree are BSTAll elements in left sub...

  • BST

    简书 賈小強转载请注明原创出处,谢谢! 输出 Happy learning !!

  • BST

    BST实现代码:

  • BST

    算法导论这本书真的确实很有帮助,你照着书上的代码打一遍就有助于你理解这种data structure是如何实现的。...

  • [python] 2019-03-07

    .938. Range Sum of BST (不会) 938. Range Sum of BST 1) desc...

网友评论

      本文标题:BST

      本文链接:https://www.haomeiwen.com/subject/pmelpltx.html