Leetcode 236
来源:互联网 发布:centos minimal 区别 编辑:程序博客网 时间:2024/05/16 23:45
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 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).”
_______3______ / \ ___5__ ___1__ / \ / \ 6 _2 0 8 / \ 7 4
For example, the lowest common ancestor (LCA) of nodes 5
and 1
is 3
. Another example is LCA of nodes 5
and 4
is 5
, since a node can be a descendant of itself according to the LCA definition.
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}public class Solution236 { /*public boolean dfs(TreeNode root, TreeNode p, Stack<TreeNode> tmp) { *//*if(root == null || root == p) { if (root == null) return false; else { tmp.push(root); return true; } } tmp.push(root); if(dfs(root.left,p,tmp) || dfs(root.right, p, tmp)) { return true; } tmp.pop(); return false;*//* if(root == null) return false; if(root == p) { tmp.push(p); return true; } tmp.push(root); if(dfs(root.left, p, tmp) || dfs(root.right, p, tmp)) { //tmp.push(root); return true; } tmp.pop(); return false; } public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { Stack<TreeNode> queuep = new Stack<TreeNode>(); Stack<TreeNode> queueq = new Stack<TreeNode>(); // dfs(root, p, queuep); dfs(root, q, queueq); *//*TreeNode result = null; for (int i = 0; i < queuep.size() && i < queueq.size(); i++) { if(!queuep.get(i).equals(queueq.get(i))) { break; } result = queuep.get(i); }*//* Enumeration<TreeNode> itemsq = queueq.elements(); while (itemsq.hasMoreElements()) { System.out.print(itemsq.nextElement().val+" "); } return null; //return result; }*/ public boolean dfs_s(TreeNode root, TreeNode p, Stack<TreeNode> tmp) { if(root == null || root == p) { if (root == null) return false; else { tmp.push(root); return true; } } if(dfs_s(root.left,p,tmp) || dfs_s(root.right, p, tmp)) { tmp.push(root); return true; } return false; /*tmp.push(root); //如果用这种方法虽然结果是正确的,但是会发生栈溢出, if(dfs_s(root.left,p,tmp) || dfs_s(root.right, p, tmp)) { return true; } tmp.pop(); return false;*/ } public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { Stack<TreeNode> queuep = new Stack<TreeNode>(); Stack<TreeNode> queueq = new Stack<TreeNode>(); TreeNode result = null; if(dfs_s(root, p, queuep) && dfs_s(root, q, queueq)) { for (int i = queuep.size()-1, j=queueq.size()-1; i >=0 && j >= 0; i--, j--) { if(!queuep.get(i).equals(queueq.get(j))) { break; } result = queuep.get(i); } } return result; } public static void main(String[] args) { TreeNode p = null, q = null; TreeNode root = new TreeNode(3); root.left = new TreeNode(5); p = root.left; root.left.left = new TreeNode(6); root.left.right = new TreeNode(2); root.left.right.left = new TreeNode(7); root.left.right.right = new TreeNode(4); root.right = new TreeNode(1); //q = root.right; q=root.left.right.right; root.right.left = new TreeNode(0); root.right.right = new TreeNode(8); Solution236 ans = new Solution236(); TreeNode result = ans.lowestCommonAncestor(root, p, q); //System.out.println(result); }}
0 0
- Leetcode 236
- Leetcode no. 236
- leetcode-236-Ugly Number
- leetcode 235&236
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- 前事不忘后事之师
- POJ - 1438 One-way Traffic(混合图改有向图)
- 总结SUMMARY
- POJ - 1523 SPF(割点)
- zoj3164
- Leetcode 236
- 安卓圆角
- linux mysql增加用户,删除用户,以及用户权限
- 【原创】IMSDroid学习之一:编译doubango for android
- POJ 2456 二分
- httpxml.send->拒绝访问错误80070005的解决方法
- 简单实现EditText右侧删除按钮
- Python的attrgetter()
- OpenScad的学习笔记