Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二叉树的生命周期分析-需要一些建议吗_Java_Binary Tree_Lowest Common Ancestor - Fatal编程技术网

Java 二叉树的生命周期分析-需要一些建议吗

Java 二叉树的生命周期分析-需要一些建议吗,java,binary-tree,lowest-common-ancestor,Java,Binary Tree,Lowest Common Ancestor,我知道这个问题已经被问过很多次了。我需要一些关于二叉树(不是BST)的LCA的澄清。如果我试图从给定树中查找两个节点(3,11)的LCA: _______1______ / \ ___2__ ___4__ / \ / \ 6 5 9 11 / \ 7 3 对于(3,11

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

    _______1______
   /              \
 ___2__          ___4__
/      \        /      \
6       5       9       11
                       /  \
                       7   3
对于(3,11),代码返回11


这里我很困惑,应该是4对了。如果我错了,请纠正我。我在这里困惑吗?还是生命周期评价的工作方式

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

我认为您可能忽略了元素被视为自身后代的一点:

…树或有向无环图(DAG)中两个节点v和w的最低共同祖先(LCA)是具有v和w作为后代的最低(即最深)节点,其中我们将每个节点定义为自身的后代(因此,如果v与w有直接连接,w是最低共同祖先)

(强调矿山)


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

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

我认为您可能忽略了元素被视为自身后代的一点:

…树或有向无环图(DAG)中两个节点v和w的最低共同祖先(LCA)是具有v和w作为后代的最低(即最深)节点,其中我们将每个节点定义为自身的后代(因此,如果v与w有直接连接,w是最低共同祖先)

(强调矿山)

由于
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;
  }
}

}