gpt4 book ai didi

java - 二叉树的 LCA - 需要一些建议

转载 作者:太空宇宙 更新时间:2023-11-04 13:20:44 25 4
gpt4 key购买 nike

我知道这个问题已经被问过很多次了。我需要对二叉树(不是 BST)的 LCA 进行一些澄清。如果我试图从给定的树中找到两个节点(3,11)的 LCA:

    _______1______
/ \
___2__ ___4__
/ \ / \
6 5 9 11
/ \
7 3

代码对于 (3,11) 返回 11。

 // Binary Tree LCA not BST
private Node findLowestCommonAncestor(Node root, int value1, int value2) {

Node leftLCA = null;
Node rightLCA = null;

if (root == null) {
return null;
}

else {
int value = root.item;

if (value == value1 || value == value2) {
return root;

}

else {

leftLCA = findLowestCommonAncestor(root.left, value1, value2);
rightLCA = findLowestCommonAncestor(root.right, value1, value2);

if (leftLCA != null && rightLCA != null) {
return root;
}

return (leftLCA != null) ? leftLCA : rightLCA;
}
}

}

这里我很困惑,应该是4吧。如果我错了,请纠正我。我在这里感到困惑吗?或者这是 LCA 的工作原理吗?

最佳答案

11 是您所显示的树中 (3, 11) 的正确 LCA。

我认为您可能忽略了 the definition of LCA 中的一点其中元素被视为自身的后代:

...the lowest common ancestor (LCA) of two nodes v and w in a tree or directed acyclic graph (DAG) is the lowest (i.e. deepest) node that has both v and w as descendants, where we define each node to be a descendant of itself (so if v has a direct connection from w, w is the lowest common ancestor).

(强调我的)

由于 311 的子级,因此 LCA 是 11

关于java - 二叉树的 LCA - 需要一些建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33089861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com