day 20| BST的插入删除和最深层公共祖先
全部都回顾一下吧
- BST 的最深公共祖先
这里根据 BST 的定义,对于cur,左边的节点都小于他。 从上往下遍历,给定一个值,如果该值在两个节点值之间则必然是他们的公共祖先。 (在向下遍历的话显然会被分成两颗树,向上的话就不是最深的了)
所以用 BFS 可以直接坐。
- 删除BST 节点
- 这里稍微卡顿了一下。对于要删除的节点有左右子节点的情况
- 找到右子树的最左侧节点
- 将 root 的左子树挂到最左侧节点的左侧
- 返回root 的右节点
写的过程中我老是想找到 root 的最左侧节点,然后替代原来的 root 节点。 导致的结果就是可能这个节点就是 root 的右节点,循环引用,然后时间超时。 必须要考虑一些边缘情况,写了之后又发现最后几个样例过不了,而且好多节点。没办法只能看一下讲解了