[leetcode]236. Lowest Common Ancestor of a Binary Tree二叉树最近公共祖先
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
Given the following binary search tree: root = [3,5,1,6,2,0,8,null,null,7,4]
_______3______
/ \
___5__ ___1__
/ \ / \
6 _2 0 8
/ \
7 4
Example 1:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
Output: 3
Explanation: The LCA of of nodes 5 and 1 is 3.
Example 2:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
Output: 5
Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself
according to the LCA definition.
题意:
二叉树最近公共祖先

思路:
用自底向上(bottom-up)的思路,先看看是否能在root的左子树中找到p或q,再看看能否在右子树中找到,
- 如果两边都能找到,说明当前节点就是最近公共祖先
 - 如果左边没找到,则说明
p和q都在右子树 - 如果右边没找到,则说明
p和q都在左子树 
recursion
1. search for either of two nodes(node1, node2) whose lca starting from root
2. any of the node is found, return that node to its parent
3. any node gets a not null node from left side and a not null node from right side, it is lca. return that node to its parent
    ___5__                                             root 5
   /      \               root.left /   /return 6        root.right\ \ return 4
   6      _2                     6 find node1                            2
         /  \                                           root.left  //return null   \\ return 4
         7   4                                                    7                4 find 4 
node1: 6  node2: 4 
code
/**
* 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 node1, TreeNode node2) {
// base
if (root == null || root == node1 || root == node2) {
return root;
}
// go into recursion on left side, passing same node1, node2
TreeNode left = lowestCommonAncestor(root.left, node1, node2);
TreeNode right = lowestCommonAncestor(root.right, node1, node2);
// left != null && right != null
if (left != null && right != null) {
return root; // such root is lca
}
// left!=null && right ==null
if (left != null) {
return left;
}
// right!=null && left == null
if (right!=null) {
return right;
}
// right ==null && left == null
return null;
}
}
[leetcode]236. Lowest Common Ancestor of a Binary Tree二叉树最近公共祖先的更多相关文章
- [leetcode]236. Lowest Common Ancestor of a Binary Tree 二叉树最低公共父节点
		
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
 - [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先
		
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
 - [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点
		
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
 - 236. Lowest Common Ancestor of a Binary Tree(最低公共祖先,难理解)
		
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
 - LeetCode 236 Lowest Common Ancestor of a Binary Tree 二叉树两个子节点的最低公共父节点
		
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
 - leetcode@ [236] Lowest Common Ancestor of a Binary Tree(Tree)
		
https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ Given a binary tree, find the ...
 - leetcode 236. Lowest Common Ancestor of a Binary Tree
		
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
 - (medium)LeetCode 236.Lowest Common Ancestor of a Binary Tree
		
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
 - LeetCode OJ:Lowest Common Ancestor of a Binary Tree(最近公共祖先)
		
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
 
随机推荐
- 以Windows服务方式运行ASP.NET Core程序【转载】
			
我们对ASP.NET Core的使用已经进行了相当一段时间了,大多数时候,我们的Web程序都是发布到Linux主机上的,当然了,偶尔也有需求要发布到Windows主机上,这样问题就来了,难道直接以控制 ...
 - java 各种循环遍历
			
遍历方式选择: 实现了 RandomAccess 接口的 list,优先选择普通 for 循环 ,其次 foreach: 未实现 RandomAccess 接口的 list, 优先选择 iterato ...
 - 【python】脚本连续发送QQ邮件
			
今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱.163邮箱.google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱.一下逐步解答相关技巧. 首 ...
 - Padavan老毛子固件:17CE插件集成
			
Padavan老毛子固件:17CE插件集成 1.老毛子路由设置:系统管理-服务-启动SSH服务器 以下链接下载 "winscp" http://down.orsoon.co ...
 - Ubuntu 16.04 安装 JDK 1.8
			
系统环境 Ubuntu 16.04; JDK 1.8 配置安装 1.首先从oracle下载jdk 1.8,我下载的版本是jdk-8u131-linux-x64.tar.gz,运行tar zvxf jd ...
 - 02-模拟Junit4功能
			
package com.day2; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; im ...
 - VUE图片懒加载-vue lazyload插件的简单使用
			
序:vue项目时候,我们要对图片进行懒加载处理,这个开发项目中就不需要自己去写了,因为比较方便使用vue lazyload进行处理,高效率开发 一. vue lazyload插件: 插件地址:http ...
 - requests_html  使用
			
安装 pip install requests-html #2种方式爬取 博客园from requests_html import HTMLSession session=HTMLSession() ...
 - spring boot 之 spring security 配置
			
Spring Security简介 之前项目都是用shiro,但是时过境迁,spring security变得越来越流行.spring security的前身是Acegi, acegi 我也玩过,那都 ...
 - Python第2天
			
今天学习的主要内容: pycharm专业版的安装和注册,采用注册码的方式注册. 运算符,+ — * / // % < > <= >= != <> . 基本数据类型 ...