zoukankan      html  css  js  c++  java
  • 235 Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最近公共祖先

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

    详见:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/

    Java实现:

    方法一:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if(root==null){
                return null;
            }
            if(root.val>Math.max(p.val,q.val)){
                return lowestCommonAncestor(root.left,p,q);
            }
            if(root.val<Math.min(p.val,q.val)){
                return lowestCommonAncestor(root.right,p,q);
            }
            return root;
        }
    }
    

     方法二:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if(root==null||root==p||root==q){
                return root;
            }
            TreeNode left=lowestCommonAncestor(root.left,p,q);
            TreeNode right=lowestCommonAncestor(root.right,p,q);
            if(left!=null&&right!=null){
                return root;
            }
            return left!=null?left:right;
        }
    }
    

     C++实现:

    方法一:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            if(root==nullptr)
            {
                return root;
            }
            if(root->val>max(p->val,q->val))
            {
                return lowestCommonAncestor(root->left,p,q);
            }
            if(root->val<min(p->val,q->val))
            {
                return lowestCommonAncestor(root->right,p,q);
            }
            return root;
        }
    };
    

    方法二:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            if(root==nullptr||root==p||root==q)
            {
                return root;
            }
            TreeNode *left=lowestCommonAncestor(root->left,p,q);
            TreeNode *right=lowestCommonAncestor(root->right,p,q);
            if(left&&right)
            {
                return root;
            }
            return left?left:right;
        }
    };
    

     参考:http://www.cnblogs.com/grandyang/p/4640572.html

  • 相关阅读:
    Spring Cloud Data Flow整合UAA之使用LDAP进行账号管理
    2020,分手快乐;2021,且行且歌
    Spring Cloud Data Flow整合UAA使用外置数据库和API接口
    Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制
    Spring自定义转换类,让@Value更方便
    2020年11月CKA新题考试心得体会
    使用Go module和GoLand初始化一个Go项目
    Spring Cloud Gateway简单入门,强大的微服务网关
    vue百度地图实现自定义覆盖物
    vue 中安装使用jquery
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8759254.html
Copyright © 2011-2022 走看看