码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode_Lowest Common Ancestor of a Binary Search Tree (Binary Tree)

时间:2017-07-22 14:27:09      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:dfs   int   http   markdown   app   add   csdn   -o   ack   

Lowest Common Ancestor of a Binary Search Tree

一、题目描写叙述

技术分享

二、思路及代码

二叉搜索树有个性质:左子树的值都比根节点小,右子树的值比根节点大。那么我们的思路就是递归比較。
假设输入的两个节点的值比当前节点小,说明是在当前根节点的左子树中;反之则在右子树中。

假设当前根节点比一个大。比一个小。那么第一个出现的这种节点就是近期的父亲节点了。

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

Lowest Common Ancestor of a Binary Tree

一、题目描写叙述

技术分享

二、思路及代码

假设是普通的二叉树。没有了二叉搜索树的特性。就要遍历;于是我们用到DFS遍历树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null || root == p || root == q) return root; //找到p或者q节点,或者到最底层的叶子节点时,返回;
        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; //所以假设都未找到,返回null } }

LeetCode_Lowest Common Ancestor of a Binary Search Tree (Binary Tree)

标签:dfs   int   http   markdown   app   add   csdn   -o   ack   

原文地址:http://www.cnblogs.com/brucemengbm/p/7221089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!