Lowest Common Ancestor of a Binary Search Tree
2015-07-17 23:44
330 查看
题目235:Lowest Common Ancestor of a Binary Search Tree
题目描述:求二叉搜索树的最低公共祖先。
1.递归解法
思路1:参考[1]:
二叉搜索树,左子树的关键字都小于父结点,右子树的关键字都大于父结点。
所以如果是两个结点n1、n2的公共祖先,则公共祖先的关键字的值一定是n1 < n < n2(n1和n2也可能等于其中任意一个),所以只要从根开始递归的遍历,如果当前结点的关键字大于n1和n2,则LCA在当前结点的左子树;如果当前结点的关键字小于n1和n2,则LCA在当前结点的右子树;如果当前结点的关键字大于n1,小于n2,则返回当前结点。
/** * 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 == 0) return root; if (root->val > p->val && root->val > q->val) return lowestCommonAncestor(root->left, p, q); if (root->val < p->val && root->val < q->val) return lowestCommonAncestor(root->right, p, q); return root; } };
递归解法的时间复杂度是O(h),h是二叉树的高度,需要额外的O(h)空间复杂度因为递归调用的函数栈。我们可以使用迭代的解法,来避免额外的空间。
2.非递归解法
思路2:同是思路1,只是改为非递归,比如思路1是在左子树遍历查找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) { while (root) { if (root->val > p->val && root->val > q->val) root = root->left; else if (root->val < p->val && root->val < q->val) root= root->right; else break; } return root; } };
参考:
[1] http://www.geeksforgeeks.org/lowest-common-ancestor-in-a-binary-search-tree/
相关文章推荐
- 命令行快速技巧:如何定位一个文件
- Search Engine XSS Worm
- 简介JavaScript中search()方法的使用
- cmd tree命令 以树形格式罗列文件
- 推荐8款jQuery轻量级树形Tree插件
- js闭包实现按秒计数
- tree 以树形格式罗列文件
- EasyUI Tree+Asp.net实现权限树或目录树导航的简单实例
- 向大家推荐一个收集整理正则表达式的网站
- E3 tree 1.6在Firefox下显示问题的修复方法
- js树形控件脚本代码
- Js&Vbs正则表达式替换重复的字符
- 限制文本框中只能输入实数或整数,其它字符无效,有劳大家了!
- 关于IE的RegExp.exec的问题
- 最严谨的校验email地址的正则表达式及各种语言对应版
- Google Map Api和GOOGLE Search Api整合实现代码
- javascript中的window.location.search方法简介
- 教你使用javascript简单写一个页面模板引擎
- Microsoft Search 服务无法启动 解决办法.
- MYSQL的binary解决mysql数据大小写敏感问题的方法