Merge pull request #763 from RyouMon/master

修复 0236.二叉树的最近公共祖先.md/0235.二叉搜索树的最近公共祖先.md Python3解法
This commit is contained in:
程序员Carl
2021-09-20 09:47:58 +08:00
committed by GitHub
2 changed files with 32 additions and 14 deletions

View File

@ -268,17 +268,30 @@ class Solution {
递归法: 递归法:
```python ```python
class Solution: class Solution:
"""二叉搜索树的最近公共祖先 递归法"""
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root: return root // if root.val > p.val and root.val > q.val:
if root.val >p.val and root.val > q.val: return self.lowestCommonAncestor(root.left, p, q)
return self.lowestCommonAncestor(root.left,p,q) // if root.val < p.val and root.val < q.val:
elif root.val < p.val and root.val < q.val: return self.lowestCommonAncestor(root.right, p, q)
return self.lowestCommonAncestor(root.right,p,q) // return root
else: return root
``` ```
迭代法: 迭代法:
```python
class Solution:
"""二叉搜索树的最近公共祖先 迭代法"""
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
while True:
if root.val > p.val and root.val > q.val:
root = root.left
elif root.val < p.val and root.val < q.val:
root = root.right
else:
return root
```
## Go ## Go

View File

@ -264,16 +264,21 @@ class Solution {
## Python ## Python
```python ```python
//递归
class Solution: class Solution:
"""二叉树的最近公共祖先 递归法"""
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root or root == p or root == q: return root //找到了节点p或者q或者遇到空节点 if not root or root == p or root == q:
left = self.lowestCommonAncestor(root.left,p,q) // return root
right = self.lowestCommonAncestor(root.right,p,q) //
if left and right: return root //: left和right不为空root就是最近公共节点 left = self.lowestCommonAncestor(root.left, p, q)
elif left and not right: return left //目标节点是通过left返回的 right = self.lowestCommonAncestor(root.right, p, q)
elif not left and right: return right //目标节点是通过right返回的
else: return None //没找到 if left and right:
return root
if left:
return left
return right
``` ```
## Go ## Go