[LeetCode]: 235:Lowest Common Ancestor of a Binary Search Tree
2015-09-13 23:30
393 查看
题目:
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
方法一:直接找p和q的父节点,然后比较父节点的情况来判断
代码:
小结:该方法因为递归运算多,在数据比较大的时候超时
方法二:根据BST的性质,两个节点a,b的公共袓先c一定满足a <= c <= b 或者 a >= c >= b。
代码:
但是结果效率还不是很靠前
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).”
_______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.
方法一:直接找p和q的父节点,然后比较父节点的情况来判断
代码:
public static TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if( (p.left != null && p.left.val == q.val )|| (p.right!= null && p.right.val == q.val)){ return p; } if( (q.left != null && q.left.val == p.val )|| (q.right!= null && q.right.val == p.val)){ return q; } if(p.val == q.val){ return p; } TreeNode pFather = findFather(root,p); TreeNode qFather = findFather(root,q); if(pFather.val == qFather.val){ return pFather; } if(pFather.val > qFather.val){ return lowestCommonAncestor(root,p,qFather); } else{ return lowestCommonAncestor(root,pFather,q); } } public static TreeNode findFather(TreeNode root, TreeNode p) { if(root == null || (root.left == null && root.right == null) ){ System.out.println("1: null"); return root; } if(root.left!= null && root.left.val == p.val ){ System.out.println("2: " +root.left.val ); return root; } if(root.right!= null && root.right.val == p.val ){ System.out.println("3: " +root.right.val ); return root; } if(root.val > p.val){ return findFather(root.left,p); } else{ return findFather(root.right,p); } }
小结:该方法因为递归运算多,在数据比较大的时候超时
方法二:根据BST的性质,两个节点a,b的公共袓先c一定满足a <= c <= b 或者 a >= c >= b。
代码:
public static TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(p.val <= q.val){ if(p.val <= root.val && root.val <= q.val){ return root; } else{ if(root.val >= q.val){ return lowestCommonAncestor(root.left,p,q); } else{ return lowestCommonAncestor(root.right,p,q); } } } else{ if(q.val <= root.val && root.val <= p.val){ return root; } else{ if(root.val >= p.val){ return lowestCommonAncestor(root.left,p,q); } else{ return lowestCommonAncestor(root.right,p,q); } } } }
但是结果效率还不是很靠前
相关文章推荐
- LintCode Update Bits
- hdu 5438 Ponds 拓扑排序+并查集 2015 ACM/ICPC Asia Regional Changchun Online
- linux命令之ip
- Xcode7 使用NSURLSession发送HTTP请求报错
- EclipseProblems:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 自定义JTabbedPane的标签栏
- 优先对列模拟 hdu5437 Alisha’s Party
- 2015第37周日
- 5个数求最值—南阳acm
- 大话设计模式笔记 代理模式
- 软件工程的实践项目的自我目标
- postfix邮件系统
- 江南水乡
- Java 语言基础
- php各种坑之字符串
- Unable to load configuration .../WEB-INF/struts2-core-2.3.20.jar!/struts-default.xml:82:179
- 在eclipse中输入.后没有提示
- 写多了博客,就想沽名钓誉
- 关于一些产品的指标
- windows 进程堆结构梳理