235. Lowest Common Ancestor of a Binary Search Tree
来源:互联网 发布:mac brew install jdk 编辑:程序博客网 时间:2024/06/08 02:10
题目
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 2
and 8
is 6
. Another example is LCA of nodes 2
and 4
is 2
, since a node can be a descendant of itself according to the LCA definition.
分析
所给的树是二分检索树,中根遍历得到由小到大的顺序排列,因此如果p,q 比root小, 则LCA必定在左子树, 如果p,q比root大, 则LCA必定在右子树. 如果一大一小,或者其中一个与root相等, 则root即为LCA。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { TreeNode* temp; if(root==NULL) return NULL; if(max(p->val, q->val) < root->val) { return lowestCommonAncestor(root->left, p, q); } else if(min(p->val, q->val) > root->val) { return lowestCommonAncestor(root->right, p, q); } else return root; }};
假设给出的不是二分检索树,而是一个普通的二叉树,则需要分别从根结点出发,搜索p,q,保存两条路径,随后比较着两条路径,最后一个相同的结点即为LCA
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root==null || p==null || q==null) return null; List<TreeNode> pathp = new ArrayList<>(); List<TreeNode> pathq = new ArrayList<>(); pathp.add(root); pathq.add(root); getPath(root, p, pathp); getPath(root, q, pathq); TreeNode* lca = null; for(int i=0; i<pathp.size() && i<pathq.size(); i++) { if(pathp.get(i) == pathq.get(i)) lca = pathp.get(i); else break; } return lca; } private boolean getPath(TreeNode* root, TreeNode* n, List<TreeNode> path) { if(root==n) { return true; } if(root.left!=null) { path.add(root.left); if(getPath(root.left, n, path)) return true; path.remove(path.size()-1); } if(root.right!=null) { path.add(root.right); if(getPath(root.right, n, path)) return true; path.remove(path.size()-1); } return false; }}
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- [leetcode] 235.Lowest Common Ancestor of a Binary Search Tree
- [LeetCode]235.Lowest Common Ancestor of a Binary Search Tree
- 235.Lowest Common Ancestor of a Binary Search Tree
- 235. Lowest Common Ancestor of a Binary Search Tree
- 235. Lowest Common Ancestor of a Binary Search Tree
- 235. Lowest Common Ancestor of a Binary Search Tree
- 【LeetCode】235. Lowest Common Ancestor of a Binary Search Tree
- 235. Lowest Common Ancestor of a Binary Search Tree LeetCode
- 235. Lowest Common Ancestor of a Binary Search Tree
- 235. Lowest Common Ancestor of a Binary Search Tree
- 235. Lowest Common Ancestor of a Binary Search Tree
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- 235. Lowest Common Ancestor of a Binary Search Tree
- [LeetCode]235. Lowest Common Ancestor of a Binary Search Tree
- [LeetCode]235. Lowest Common Ancestor of a Binary Search Tree
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- [leetcode] 235. Lowest Common Ancestor of a Binary Search Tree
- leetcode 之Maximum Depth of Binary Tree 用 C语言实现
- Android自定义View的实现方法,带你一步步深入了解View(四)
- 关于JVM的常见问题(一)
- Java CountDownLatch 异步转同步的实现方法
- SQL_自动生成党组织编码
- 235. Lowest Common Ancestor of a Binary Search Tree
- Cocos 资料大全 下载链接地址
- 嵌入式linux系统开发概述之六----图形用户界面(GUI)
- 腾讯力作!iOS 9 人机界面指南(5):图标与图形设计
- WordCount单词计数详解
- springmvc4.2.5+jackson2.7出现NoSuchMethodError问题
- ADFS 3.0登录页面不用输入域名的实现方法
- 分段与分页机制小结
- 从Delphi REST服务器返回图像并显示在浏览器中