Skip to content

Commit f4ddd5d

Browse files
committed
feat: update solutions to lc problem: No.0235
No.0235.Lowest Common Ancestor of a Binary Search Tree
1 parent cd178bd commit f4ddd5d

File tree

5 files changed

+19
-18
lines changed

5 files changed

+19
-18
lines changed

solution/0200-0299/0231.Power of Two/README.md

+9-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,15 @@
6565

6666
<!-- 这里可写通用的实现逻辑 -->
6767

68-
1. `n & (n - 1)` 可将最后一个二进制形式的 n 的最后一位 1 移除,若移除后为 0,说明 n 是 2 的幂。
69-
2. lowbit:`n & (-n)` 可以得到 n 的最后一位 1 表示的十进制数,若与 n 相等,说明 n 是 2 的幂。
68+
**方法一:位运算**
69+
70+
$\texttt{n\&(n-1)}$ 可将最后一个二进制形式的 $n$ 的最后一位 $1$ 移除,若移除后为 $0$,说明 $n$ 是 $2$ 的幂。
71+
72+
**方法二:lowbit**
73+
74+
$\texttt{n\&(-n)}$ 可以得到 $n$ 的最后一位 $1$ 表示的十进制数,若与 $n$ 相等,说明 $n$ 是 $2$ 的幂。
75+
76+
注意:要满足 $n$ 是 $2$ 的幂次方,需要保证 $n$ 大于 $0$。
7077

7178
<!-- tabs:start -->
7279

solution/0200-0299/0235.Lowest Common Ancestor of a Binary Search Tree/README.md

+4-7
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@
6363
class Solution:
6464
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
6565
while root:
66-
if root.val < p.val and root.val < q.val:
66+
if root.val < min(p.val, q.val):
6767
root = root.right
68-
elif root.val > p.val and root.val > q.val:
68+
elif root.val > max(p.val, q.val):
6969
root = root.left
7070
else:
7171
return root
@@ -85,9 +85,9 @@ class Solution:
8585
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
8686
if root is None:
8787
return None
88-
if root.val < p.val and root.val < q.val:
88+
if root.val < min(p.val, q.val):
8989
return self.lowestCommonAncestor(root.right, p, q)
90-
if root.val > p.val and root.val > q.val:
90+
if root.val > max(p.val, q.val):
9191
return self.lowestCommonAncestor(root.left, p, q)
9292
return root
9393
```
@@ -226,9 +226,6 @@ function lowestCommonAncestor(
226226

227227
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
228228
for root != nil {
229-
// 如果 p、q 的值都小于 root,说明 p、q 肯定在 root 的左子树中;
230-
// 如果 p、q 都大于 root,说明肯定在 root 的右子树中;
231-
// 如果一个在左一个在右,则说明此时的 root 记为对应的最近公共祖先。
232229
if root.Val > p.Val && root.Val > q.Val {
233230
root = root.Left
234231
} else if root.Val < p.Val && root.Val < q.Val {

solution/0200-0299/0235.Lowest Common Ancestor of a Binary Search Tree/README_EN.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ Iterative:
6262
class Solution:
6363
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
6464
while root:
65-
if root.val < p.val and root.val < q.val:
65+
if root.val < min(p.val, q.val):
6666
root = root.right
67-
elif root.val > p.val and root.val > q.val:
67+
elif root.val > max(p.val, q.val):
6868
root = root.left
6969
else:
7070
return root
@@ -84,9 +84,9 @@ class Solution:
8484
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
8585
if root is None:
8686
return None
87-
if root.val < p.val and root.val < q.val:
87+
if root.val < min(p.val, q.val):
8888
return self.lowestCommonAncestor(root.right, p, q)
89-
if root.val > p.val and root.val > q.val:
89+
if root.val > max(p.val, q.val):
9090
return self.lowestCommonAncestor(root.left, p, q)
9191
return root
9292
```

solution/0200-0299/0235.Lowest Common Ancestor of a Binary Search Tree/Solution.go

-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@
99

1010
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
1111
for root != nil {
12-
// 如果 p、q 的值都小于 root,说明 p、q 肯定在 root 的左子树中;
13-
// 如果 p、q 都大于 root,说明肯定在 root 的右子树中;
14-
// 如果一个在左一个在右,则说明此时的 root 记为对应的最近公共祖先。
1512
if root.Val > p.Val && root.Val > q.Val {
1613
root = root.Left
1714
} else if root.Val < p.Val && root.Val < q.Val {

solution/0200-0299/0235.Lowest Common Ancestor of a Binary Search Tree/Solution.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ def lowestCommonAncestor(
1111
self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode'
1212
) -> 'TreeNode':
1313
while root:
14-
if root.val < p.val and root.val < q.val:
14+
if root.val < min(p.val, q.val):
1515
root = root.right
16-
elif root.val > p.val and root.val > q.val:
16+
elif root.val > max(p.val, q.val):
1717
root = root.left
1818
else:
1919
return root

0 commit comments

Comments
 (0)