用python3写用给定一个二叉树和两个节点,实现一个函数,找到这两个节点的最近公共祖先。最近公共祖先是指离这两个节点最近的、同时是它们祖先的节点。验证你的实现是否正确,通过对二叉树进行先序遍历、中序遍历、后序遍历和层次遍历,找到给定节点的最近公共祖先
时间: 2024-05-05 22:18:21 浏览: 76
这是一个技术问题,可以直接回答。对于给定的二叉树和两个节点,我们可以采用递归的方式来寻找它们的最近公共祖先。具体实现方法可以参考下面的示例代码:
```python
# 定义二叉树节点类
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 定义寻找最近公共祖先的函数
def lowestCommonAncestor(root, p, q):
if not root or root == p or root == q:
return root
left = lowestCommonAncestor(root.left, p, q)
right = lowestCommonAncestor(root.right, p, q)
return root if left and right else left or right
# 生成二叉树并验证寻找最近公共祖先的实现
root = TreeNode(3)
root.left = TreeNode(5)
root.right = TreeNode(1)
root.left.left = TreeNode(6)
root.left.right = TreeNode(2)
root.right.left = TreeNode(0)
root.right.right = TreeNode(8)
root.left.right.left = TreeNode(7)
root.left.right.right = TreeNode(4)
p = root.left
q = root.right
ancestor = lowestCommonAncestor(root, p, q)
print('The lowest common ancestor of', p.val, 'and', q.val, 'is', ancestor.val)
```
对于这个二叉树,先序遍历的结果为[3, 5, 6, 2, 7, 4, 1, 0, 8],中序遍历的结果为[6, 5, 7, 2, 4, 3, 0, 1, 8],后序遍历的结果为[6, 7, 4, 2, 5, 0, 8, 1, 3],层次遍历的结果为[3, 5, 1, 6, 2, 0, 8, 7, 4]。我们可以通过这些遍历方式来验证寻找最近公共祖先的正确性。
阅读全文