zoukankan      html  css  js  c++  java
  • 235. 二叉搜索树的最近公共祖先

    给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

    百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

    例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]

     

    示例 1:

    输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
    输出: 6
    解释: 节点 2 和节点 8 的最近公共祖先是 6

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree

     1 public class LowestCommonAncestorofaBinarySearchTree {
     2     static class TreeNode{
     3         int val;
     4         TreeNode left;
     5         TreeNode right;
     6         TreeNode(int x) {
     7             this.val = x;
     8         }
     9     }
    10 
    11     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    12         if(root == null) {
    13             return null;
    14         }        
    15         if((root.val >= p.val && root.val <= q.val) || (root.val <= p.val && root.val >= q.val)) {
    16             return root;
    17         }
    18         if(p.val > root.val && q.val > root.val) {
    19             return lowestCommonAncestor(root.right, p, q);
    20         }
    21         if(p.val < root.val && q.val < root.val) {
    22             return lowestCommonAncestor(root.left, p, q);
    23         }
    24         return null;
    25     }
    26 }
     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 
    11 class Solution {
    12     private TreeNode result = null;
    13     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    14         if(root == null) {
    15             return null;
    16         }
    17         if((root.val >= p.val && root.val <= q.val) || (root.val <= p.val && root.val >= q.val)) {
    18             result = root;
    19         }
    20         if(p.val > root.val && q.val > root.val) {
    21             lowestCommonAncestor(root.right, p, q);
    22         }
    23         if(p.val < root.val && q.val < root.val) {
    24             lowestCommonAncestor(root.left, p, q);
    25         }
    26         return result;
    27     }
    28 }
    无论有多困难,都坚强的抬头挺胸,人生是一场醒悟,不要昨天,不要明天,只要今天。不一样的你我,不一样的心态,不一样的人生,顺其自然吧
  • 相关阅读:
    ELK学习实验004:Elasticsearch的简单介绍和操作
    ELK学习实验003:Elasticsearch 集群安装
    ELK学习实验002:Elasticsearch介绍及单机安装
    ELK学习实验001:Elastic Stack简介
    Eclipse 笔记
    自动
    Kali 无线网络
    安全和匿名
    Java 异常处理
    Java 构造结构私有化
  • 原文地址:https://www.cnblogs.com/xiyangchen/p/11135996.html
Copyright © 2011-2022 走看看