Merge pull request #2271 from Pika-Lee/master

Update 0235.二叉搜索树的最近公共祖先.md
This commit is contained in:
程序员Carl
2023-09-20 10:12:24 +08:00
committed by GitHub

View File

@ -50,15 +50,15 @@
因为是有序树,所有 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p 因为是有序树,所有 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p
那么只要从上到下去遍历遇到 cur节点是数值在[p, q]区间中则一定可以说明该节点cur就是q p的公共祖先 那问题来了**一定是最近公共祖先吗** 那么只要从上到下去遍历遇到 cur节点是数值在[p, q]区间中则一定可以说明该节点cur就是p q的公共祖先 那问题来了**一定是最近公共祖先吗**
如图我们从根节点搜索第一次遇到 cur节点是数值在[p, q]区间中 节点5此时可以说明 p q 一定分别存在于 节点 5的左子树和右子树中 如图我们从根节点搜索第一次遇到 cur节点是数值在[q, p]区间中 节点5此时可以说明 q p 一定分别存在于 节点 5的左子树和右子树中
![235.二叉搜索树的最近公共祖先](https://code-thinking-1253855093.file.myqcloud.com/pics/20220926164214.png) ![235.二叉搜索树的最近公共祖先](https://code-thinking-1253855093.file.myqcloud.com/pics/20220926164214.png)
此时节点5是不是最近公共祖先 如果 从节点5继续向左遍历那么将错过成为q的祖先 如果从节点5继续向右遍历则错过成为p的祖先 此时节点5是不是最近公共祖先 如果 从节点5继续向左遍历那么将错过成为p的祖先 如果从节点5继续向右遍历则错过成为q的祖先
所以当我们从上向下去递归遍历第一次遇到 cur节点是数值在[p, q]区间中那么cur就是 p和q的最近公共祖先 所以当我们从上向下去递归遍历第一次遇到 cur节点是数值在[q, p]区间中那么cur就是 q和p的最近公共祖先
理解这一点本题就很好解了 理解这一点本题就很好解了