zoukankan      html  css  js  c++  java
  • 235. Lowest Common Ancestor of a Binary Search Tree(LCA最低公共祖先)

     

    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 2and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

    思路:因为是bst, 如果root,的值介于pq之间,root就是共同祖先。

    root不是共同祖先,则递归地判断左右子树是不是公共祖先。

    递归版:

    1 class Solution {
    2     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    3         if((root.val-p.val)*(root.val-q.val)<=0) return root;
    4         return lowestCommonAncestor((root.val-p.val)>0?root.left:root.right, p, q);
    5     }
    6 }

    循环版:

    1 class Solution {
    2     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    3         while((root.val-p.val)*(root.val-q.val)>0)
    4             root = ((root.val-p.val)>0?root.left:root.right);
    5         return root;
    6     
    7     }
    8 }
  • 相关阅读:
    项目架构开发:数据访问层之Cache
    微信公众号平台接口开发:菜单管理
    【软件工程】第0次个人作业
    OO第四次博客作业
    OO第三次博客作业
    OO第二次博客作业
    Java学习笔记
    SQLInjection 靶场配置
    OO第一次博客作业
    面向对象先修:Java入门
  • 原文地址:https://www.cnblogs.com/zle1992/p/7753161.html
Copyright © 2011-2022 走看看