• 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

  • 相关阅读:
    go_接口
    go_封装
    go_结构体和方法
    go_字符和字符串处理
    go_Map
    为啥别人运行程序那么快,而你的却是龟速?
    大一新生开发的小工具火了!不一样的Python编程体验,现在的新生都这么厉害的吗
    十七种方法轻松解决PyTorch训练速度慢!
    Leetcode 1577 数的平方等于两数乘积的方法数
    C++11的decltype关键字
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8759254.html
Copyright © 2020-2023  润新知