Python实现寻找二叉树中最近的公共祖先
在二叉树中,我们可以定义节点的父节点为其直接连接上层节点的边,无法访问父节点信息的情况下如何获取两个节点的最低公共祖先呢?我们可以采用递归遍历二叉树的方式进行查找。
首先,我们需要定义一个函数来检查某个节点是否在二叉树中,如果在返回该节点,否则返回空。接着,使用递归的方法,从根节点开始遍历二叉树。具体步骤如下:
- 当前节点为 None 或者等于 p 或者 q 则直接返回当前节点;
- 在左子树中查找 p 和 q,如果都存在则返回 left;
- 在右子树中查找 p 和 q,如果都存在则返回 right;
- 如果左子树中未找到p和q,则说明p和q都在右子树中,返回 right;
- 如果右子树中未找到p和q,则说明p和q都在左子树中,返回 left;
- 最后,如果p和q分别在根节点两侧,则最近的公共祖先即为root。
下面是对应的Python代码实现:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def lowestCommonAncestor(root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root or root == p or root == q: