Algorithm 这段代码使用什么算法来查找二叉树的最低公共祖先?
在尝试解决此问题时,我在Leetcode上找到了此解决方案: Leetcode上的每个人似乎都认为这是理所当然的。但我不明白。这里发生了什么?它使用什么算法来寻找二叉树的生命周期评价Algorithm 这段代码使用什么算法来查找二叉树的最低公共祖先?,algorithm,binary-tree,lowest-common-ancestor,Algorithm,Binary Tree,Lowest Common Ancestor,在尝试解决此问题时,我在Leetcode上找到了此解决方案: Leetcode上的每个人似乎都认为这是理所当然的。但我不明白。这里发生了什么?它使用什么算法来寻找二叉树的生命周期评价 public TreeNode lowestCommonAncestorBinaryTree(TreeNode root, TreeNode p, TreeNode q) { if(root==null) { return null; } if(root==p) {
public TreeNode lowestCommonAncestorBinaryTree(TreeNode root, TreeNode p, TreeNode q) {
if(root==null) {
return null;
}
if(root==p) {
return p;
}
if(root==q) {
return q;
}
TreeNode left = lowestCommonAncestorBinaryTree(root.left, p, q);
TreeNode right = lowestCommonAncestorBinaryTree(root.right, p, q);
if (left != null && right != null) {
return root;
}
if(left!=null && right==null) {
return left;
}
if(right!=null && left==null) {
return right;
}
return null;
}
很简单:
代码查看树的根。如果根是p
或q
,则返回它
如果它不在根中,它将在根的左右子树中搜索,重复此过程,直到root
实际上是p
或q
然后是最后3个if
s
if(left!=null&&right!=null)返回root代码>
这意味着它在根的左子树中找到一个节点,在根的右子树中找到另一个节点,因此根就是LCA
if(left!=null&&right==null)返回left代码>
这意味着它在左子树中找到了一个节点,但在右子树中没有找到节点,然后左节点是另一个节点的父节点,因此是LCA
if(right!=null&&left==null)返回right代码>
这意味着它在右子树中找到了一个节点,但在左子树中没有找到节点,然后右节点是另一个节点的父节点,因此是LCA