zoukankan      html  css  js  c++  java
  • 235. Lowest Common Ancestor of a Binary Search Tree java solutions

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

    According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

            _______6______
           /              
        ___2__          ___8__
       /              /      
       0      _4       7       9
             /  
             3   5
    

    For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

    Subscribe to see which companies asked this question

    p和q的LCA是恰好把p、q分叉的节点,也就是LCA的值介于p、q之间

    从最高层的祖先root开始往下,

    若不满足LCA条件,往p、q所在子树递归。

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    12         if((p.val - root.val)*(root.val - q.val) >= 0) return root;
    13         return root.val > p.val ? lowestCommonAncestor(root.left,p,q) : lowestCommonAncestor(root.right,p,q);
    14     }
    15 }

    解法二 非递归:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    12         while(root != null){
    13             if(root.val > p.val && root.val > q.val) root = root.left;
    14             else if(root.val < p.val && root.val < q.val) root = root.right;
    15             else return root;
    16         }
    17         return root;
    18     }
    19 }
  • 相关阅读:
    sqlite3 增删改查
    Charles 修改接口返回值
    矫正Django 时间不正确
    unittest 使用 HTMLTestRunner 生成测试报告
    unittest 使用例子
    pyppeteer
    linux源码编译-安装timescaledb数据库(中标麒麟+龙芯CPU) (转载)
    不会用java api对kafka topic进行创建、查询和删除,你也太out了(建议收藏)(转载)
    django 学习(转载)
    Docker 启动镜像(转载)
  • 原文地址:https://www.cnblogs.com/guoguolan/p/5666123.html
Copyright © 2011-2022 走看看