📜  数据结构 |二叉树 |问题 13(1)

📅  最后修改于: 2023-12-03 15:40:00.414000             🧑  作者: Mango

数据结构 | 二叉树 | 问题 13

本文将简要介绍二叉树及在二叉树中寻找两节点的最近公共祖先问题。

二叉树

二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。 以下是二叉树的样例:

      1
     / \
    2   3
   / \   \
  4   5   6
最近公共祖先问题

在一棵二叉树中,给定两个节点,寻找它们最近的公共祖先。如上述样例中,节点4和节点5的最近公共祖先为2,节点5和节点6的最近公共祖先为1。

我们可以通过递归遍历树来查找最近公共祖先。从根节点开始,如果当前节点为空或等于其中一个节点,则返回该节点。否则,递归遍历其左子树和右子树。 如果在左子树中找到一个节点,在右子树中找到另一个节点,则说明当前节点为它们的最近公共祖先,返回该节点。

以下是Python代码实现最近公共祖先问题:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def lowest_common_ancestor(root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
    if not root or root == p or root == q:
        return root
    left = lowest_common_ancestor(root.left, p, q)
    right = lowest_common_ancestor(root.right, p, q)
    if left and right:
        return root
    else:
        return left or right

以上代码中,TreeNode是一个树节点类,其中包含存储节点值、左右子节点的指针。lowest_common_ancestor函数的输入root为根节点,p和q分别是需要查找最近公共祖先的节点。

总结

在本文中,我们简要介绍了二叉树及最近公共祖先问题。相关的实现代码在本文中给出。