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

  • 相关阅读:
    mysql用户
    mysql字符集
    tidb之一致性算法raft学习
    更新港资股票数据
    php中的时区设置
    PHP 中的注释
    python下如何处理windows的路径名
    安装第三方模块
    偏函数
    装饰器没学明白,记录一下,以后再学
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8759254.html
Copyright © 2011-2022 走看看