Merge pull request #2382 from markwang1992/master

更新0235二叉搜索树的最近公共祖先Go版本
This commit is contained in:
程序员Carl
2023-12-29 09:38:54 +08:00
committed by GitHub

View File

@ -48,7 +48,7 @@
在有序树里如果判断一个节点的左子树里有p右子树里有q呢
因为是有序树,所 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p
因为是有序树,所 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p
那么只要从上到下去遍历遇到 cur节点是数值在[p, q]区间中则一定可以说明该节点cur就是p q的公共祖先 那问题来了**一定是最近公共祖先吗**
@ -328,27 +328,34 @@ class Solution:
```
### Go
递归法
递归法
```go
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
if root == nil {
return nil
}
for {
if root.Val > p.Val && root.Val > q.Val {
root = root.Left
}
if root.Val < p.Val && root.Val < q.Val {
root = root.Right
}
if (root.Val - p.Val) * (root.Val - q.Val) <= 0 {
return lowestCommonAncestor(root.Left, p, q)
} else if root.Val < p.Val && root.Val < q.Val {
return lowestCommonAncestor(root.Right, p, q)
} else {
return root
}
}
return root
}
```
迭代法
```go
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
for root != nil {
if root.Val > p.Val && root.Val > q.Val {
root = root.Left
} else if root.Val < p.Val && root.Val < q.Val {
root = root.Right
} else {
return root
}
}
return nil
}
```
### JavaScript