当前位置: 首页 > 知识库问答 >
问题:

不接受二叉搜索树代码的最低共同祖先

苏浩瀚
2023-03-14
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root,TreeNode p,TreeNode q) {
    int max = Math.max(p.val, q.val);
    int min = Math.min(p.val, q.val);
    while(max<root.val) {
        root=root.left;
    }    
    while (min>root.val) {
        root=root.right;
    }      
    return root;
}
}
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    int max = Math.max(p.val, q.val);
    int min = Math.min(p.val, q.val);
    while (max<root.val||min>root.val) {
         root=root.val<min?root.right:root.left;
    }      
    return root;
}
}

如果我拆分while循环,有什么不同吗?谢了!

共有1个答案

寇照
2023-03-14

原因是第一次尝试只有在向左完成后才会向右,这意味着任何向右然后向左的目标节点都无法到达。

例如:

      3
 2         8
         6
        5 7
       4

在上面的树中,4和7的最低共同祖先是6,但达不到。

 类似资料:
  • 问题内容: 这是一个受欢迎的面试问题,我唯一可以找到的有关该主题的文章是TopCoder的文章。对我来说不幸的是,从访谈答案的角度来看,它看起来过于复杂。 除了绘制到两个节点的路径并推导祖先之外,没有其他更简单的方法了吗?(这是一个很流行的答案,但是面试题有一个变体,要求一个固定的空格答案)。 问题答案: 恒定空间答案:(尽管不一定有效)。 有一个函数findItemInPath(int inde

  • 我试图通过自顶向下递归实现二叉树最低公共祖先(LCA)问题的解决方案。 我使用的方法是: 想法:找到在任一子树中有一个所需节点的节点,而另一个所需节点是相反的子树。 以下是确切的实现: 例如: 这将返回树的根作为结果。结果=TreeNode(2)

  • 我的问题是树中有大量的节点和许多查询。是否有一种算法,它进行预处理,使查询能够在恒定的时间内得到答复。 我研究了使用RMQ的LCA,但我不能使用该技术,因为我不能对树中的这么多节点使用数组。 如果知道它是满二叉树,节点之间的关系如上所示,那么有人能给我一个高效的实现来快速回答许多查询。 但是当有很多查询时,这种算法非常耗时,因为在最坏的情况下,我可能必须遍历30的高度(树的最大高度)才能到达根(最

  • 我只用if语句解决了这个问题。它可以用其他各种方法来解决。我刚刚开始编程,所以我想不出使用任何其他数据结构来解决这个问题。 我的问题: 如何在各种方法中选择最好的方法?和我的直接天真方法相比,这种最佳方法的优点/缺点是什么。 不仅针对这个问题,总的来说。如何解决任何问题? 我的代码: 问题链接:https://www.hackerrank.com/challenges/binary-search-

  • 我有以下树结构: 其中每个节点最多有一个父节点,但可以有多个子节点。我试图找到两个没有任何子节点(node1和node2)的最低共同祖先。 这是我当前的代码: 这段代码并不总是起作用,我不知道为什么。

  • 我需要编写伪代码来检查有效的二叉树是否是搜索二叉树。 我创建了一个数组来保存树的顺序值。如果顺序值是降序的,这意味着它确实是BST。然而,我对INOVERAR方法中的递归有一些问题。 我需要更新数组的索引,以便按照值在树上的顺序将其提交给数组。 我不确定在递归过程中索引是否真的得到了正确更新。。到底是不是?如果你发现问题,能帮我解决吗?谢谢 伪代码 第一功能 IsBST(节点) 大小← 树化(节点