leetcode中等236二叉树的最近公共祖先
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等236二叉树的最近公共祖先相关的知识,希望对你有一定的参考价值。
思路:递归dfs
若 root是 p, q的 最近公共祖先 ,则:
- p和 q在 root的子树中,且分列 root的 异侧(即分别在左、右子树中);
- p = root或q=root;
返回情况
- 当 left和 right 同时为空 :说明 root 的左 / 右子树中都不包含 p,q,返回 null
- 当 left和 right同时不为空 :说明 p, q分列在 root的 异侧 ,因此root 为最近公共祖先,返回 root ;
- 当 left为空 ,right不为空 :p,q都不在 left里,直接返回 right 。right为空同理
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
if not root or root==p or root==q:
return root
left=self.lowestCommonAncestor(root.left,p,q)
right=self.lowestCommonAncestor(root.right,p,q)
if left and right:#左右都不为空,返回root
return root
elif left:
return left
elif right:
return right
return None
以上是关于leetcode中等236二叉树的最近公共祖先的主要内容,如果未能解决你的问题,请参考以下文章