开始刷leetcode day62:Lowest Common Ancestor of a Binary Search Tree
2015-07-12 05:48
465 查看
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined
between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
For example, the lowest common ancestor (LCA) of nodes
Another example is LCA of nodes
since a node can be a descendant of itself according to the LCA definition.
Java:
/**
* 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) return null;
if(root.val == p.val || root.val == q.val) return root;
else
{
TreeNode node1 = lowestCommonAncestor(root.left,p,q);
TreeNode node2 = lowestCommonAncestor(root.right, p, q);
if(node1 != null && node2 != null) return root;
else return (node1 !=null)?node1:node2;
}
}
}
注意:如果node1和node2都不为null,意味着目前的root是他们的最low father
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined
between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
_______6______ / \ ___2__ ___8__ / \ / \ 0 _4 7 9 / \ 3 5
For example, the lowest common ancestor (LCA) of nodes
2and
8is
6.
Another example is LCA of nodes
2and
4is
2,
since a node can be a descendant of itself according to the LCA definition.
Java:
/**
* 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) return null;
if(root.val == p.val || root.val == q.val) return root;
else
{
TreeNode node1 = lowestCommonAncestor(root.left,p,q);
TreeNode node2 = lowestCommonAncestor(root.right, p, q);
if(node1 != null && node2 != null) return root;
else return (node1 !=null)?node1:node2;
}
}
}
注意:如果node1和node2都不为null,意味着目前的root是他们的最low father
相关文章推荐
- iOS上SpringBoard九宫格的实现 (基于UICollectionView)
- vlan间路由,VTP,DHCP,PVST,HSRP。真是综合了好多知识点。
- vlan,vlan间路由,vtp,HSRP,PVST,DHCP。
- SpringBoard九宫格的实现 (基于UICollectionView)
- POJ 2388
- 最大连续区间和的算法总结
- Kafka 学习笔记(五)之Kafka Trouble Shooting (上)
- 开始刷leetcode day62: Subsets II
- java基础——集合框架
- Minux
- c语言,链表
- 开源协议
- Subsets
- Scheme 4 Javaer导航
- 优秀程序员如养成
- IQ Test
- Java操作文本文件的方法详解
- 字符串(2)---使用正则表达式
- 字符串
- 圆形和矩形的碰撞检测