求二叉树中两个结点的最低公共祖先结点
时间: 2023-06-11 18:09:37 浏览: 212
树中两个结点的最低公共祖先.md
在二叉树中,最低公共祖先(LCA)指的是两个结点的公共祖先中离这两个结点最近的那个结点。求二叉树中两个结点的最低公共祖先可以通过递归实现。
首先,从二叉树的根节点开始,如果根节点为空或者等于其中的一个结点,那么直接返回根节点。否则,分别递归左右子树,找到两个结点在左右子树中的位置。
如果两个结点都在左子树中,那么继续在左子树中递归查找。如果两个结点都在右子树中,那么继续在右子树中递归查找。如果两个结点一个在左子树一个在右子树,那么当前的根节点就是它们的最低公共祖先,直接返回。
下面是求二叉树中两个结点的最低公共祖先的示例代码:
```python
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def lowestCommonAncestor(root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
if not root or root == p or root == q:
return root
left = lowestCommonAncestor(root.left, p, q)
right = lowestCommonAncestor(root.right, p, q)
if left and right:
return root
return left or right
```
这里的 `TreeNode` 是二叉树的结点类,`lowestCommonAncestor` 函数接受三个参数:根节点 `root`,要查找的两个结点 `p` 和 `q`,函数返回 `p` 和 `q` 的最低公共祖先结点。
阅读全文