本文共 1694 字,大约阅读时间需要 5 分钟。
在本文中,我们将探讨如何有效地找到二叉树中两个指定节点的最近公共祖先(LCA)。最近公共祖先的定义是两个指定节点的共同祖先,并且是可能的最深节点,这可能包括其中一个节点本身。
给定一个二叉树,其中包含节点p和q,我们需要找到它们的最近公共祖先。根据题意,最近公共祖先可以是p或q本身,也可以是它们共享的最高祖先节点。
我们采用递归法来解决这个问题。这种方法适用于层次遍历结构,能够有效地探索节点的路径。以下是详细的步骤:
终止条件:
递归左、右子树:
处理返回值:
class Solution { public TreeNode searchAncester(TreeNode root, TreeNode p, TreeNode q) { if (root == null) { return null; } if (root == p || root == q) { return root; } else { TreeNode left = searchAncester(root.left, p, q); TreeNode right = searchAncester(root.right, p, q); if (left == null) { return right; } else if (right == null) { return left; } else { return root; } } } public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root == null) { return null; } return searchAncester(root, p, q); }}
searchAncester
方法:这是递归函数,用于在树中搜索节点p和q,找到它们在根节点下的最近公共祖先。
lowestCommonAncestor
方法:这是入口函数,负责初始化树的根节点,并调用searchAncester
方法进行搜索,返回树中节点p和q的最近公共祖先。
示例1:
示例2:
示例3:
通过这些示例,可以验证我们的代码能够正确地找到较低层次或较高层次的最近公共祖先。代码逻辑严谨,RecursiveDepth较小,适用于较小规模的树,性能优越。
转载地址:http://wegyk.baihongyu.com/