LeetCode Day3
Lowest Common Ancestor of a Binary Search Tree
import java.util.ArrayList; import java.util.List; /** * LeetCode: Lowest Common Ancestor of a Binary Search Tree * Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST * * @author LuoPeng * @time 215.8.5 * */ public class LowestCommonAncestor { /** * If a node A is the common ancestor, and its left child and right child are not at the same time. * A is the Lowest Common Ancestor * * @param root the root of the tree * @param p * @param q * @return lowest common ancestor (LCA) of p and q */ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if ( root == null || p == root || q == root) {return root;} TreeNode lca = null; /* * If one child is null, the lowest common ancestor must be the child of the other child of root */ if ( root.left == null) { lca = lowestCommonAncestor(root.right, p, q); } else if ( root.right == null) { lca = lowestCommonAncestor(root.left, p, q); } else { boolean first = isCommonAncestor(root.left, p, q); boolean second = isCommonAncestor(root.right, p, q); if ( first) { // if root.left is a common ancestor, the LCA must be root.left or a child of it. lca = lowestCommonAncestor(root.left, p, q); } else if (second) { // if root.right is a common ancestor, the LCA must be root.right or a child of it. lca = lowestCommonAncestor(root.right, p, q); } else { // For root is a common ancestor of p and q, the LCA must be root if the left child // and right child are not the common ancestors. lca = root; } } return lca; } /** * Whether root is the common ancestor of p and q * * @param root a node * @param p a node * @param q a node * @return True if root is the common ancestor of p and q, otherwise false. */ private boolean isCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if ( root == null) {return false;} TempQueue queue = new TempQueue(); TreeNode temp = null; boolean first = false; boolean second = false; // Breadth First Search queue.push(root); while ( !queue.empty()) { temp = queue.peek(); queue.pop(); if ( temp ==p) { first = true; } else if ( temp == q) { second = true; } // add the child if ( temp.left != null) { queue.push(temp.left); } if ( temp.right != null) { queue.push(temp.right); } // break if p and q have bean found if ( first && second) { break; } } return first && second; } } /** * Queue * */ class TempQueue { public void push(TreeNode x) { values.add(x); } public void pop() { values.remove(0); } public TreeNode peek() { return values.get(0); } public int size() { return values.size(); } public boolean empty() { return values.size()==0; } private List<TreeNode> values = new ArrayList<TreeNode>(); }
LeetCode Day3的更多相关文章
- 【LeetCode算法题库】Day3:Reverse Integer & String to Integer (atoi) & Palindrome Number
[Q7] 把数倒过来 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outpu ...
- leetcode每日刷题计划-简单篇day3
收到swe提前批面试hhh算是ep挂了的后续 努力刷题呀争取今年冲进去! Num 21 合并两个有序链表 Merge Two Sorted Lists 注意新开的链表用来输出结果的是ListNode ...
- 我为什么要写LeetCode的博客?
# 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 112 - Path Sum
题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
随机推荐
- 关于memecache的使用及清楚示意
Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任意多个连接,使用非阻塞 ...
- 学习《Python核心编程》做一下知识点提要,方便复习(一)
学习<Python核心编程>做一下知识点提要,方便复习. 计算机语言的本质是什么? a-z.A-Z.符号.数字等等组合成符合语法的字符串.供编译器.解释器翻译. 字母组合后产生各种变化拿p ...
- VS2010+ICE3.5运行官方demo报错----std::bad_alloc
纠结了一晚上,在release版本下运行没问题,一到debug就报错,卡在 Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWith ...
- swiftTools
String+Exten.swift // // String+Exten.swift // swiftTest // // Created by napiao on 15/11/27. // Cop ...
- unity 3d 生成apk文件时,设置图标
如图所示:注意红线标注部分: 如果安装到手机之后,程序的图标还是unity的默认图标,重启手机即可.
- 关于VS 2010 RDLC 报表的详细使用说明
各位技术屌丝们好, 之前我用了很长一段时间通过不断的研究揣摩,终于把RDLC报表给搞透了,今天跟大家做个总结,希望能够帮助到大家. 需求分析 我想把datagridview 中的数据打印出来. 首先 ...
- trangleProble switch方法 java
public class trangleProblem { static int res=1; int codePart=1; int n=100; Stack<Param> stack= ...
- 搭建discuz论坛(2)
修改host文件: 使用ab做性能测试: E:\Apache2.2\bin>ab -n1000 -c100 http://bbs.ct.gd/
- iOS应用之间的跳转与数据传递
在开发的时候遇到需要从其他APP调用自己的APP的需求,比如从Safari中打开APP,并且传递一些信息的需要 1.首先设置自己的URL types 打开项目中的工程文件,打开info选项,在下面的U ...
- How to Avoid Producing Legacy Code at the Speed of Typing
英语不好翻译很烂.英语好的去看原文. About the Author I am a software architect/developer/programmer.I have a rather p ...