LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
2016-03-07 16:57
447 查看
题意:求一颗二叉搜索树的上两个节点的最小公共子序列
思路:我们根据BST的性质可知,对于一个节点p,如果存在左子树,那么它左子树上的点全都小于p,如果存在右子树,那么它右子树上的点都大于p。
因此根据这个性质,我们可以知道如果这两个节点的值都小于p,则他两个一定在p的左子树上,如果都大于p,则一定在其右子树上。
递归:
非递归:
思路:我们根据BST的性质可知,对于一个节点p,如果存在左子树,那么它左子树上的点全都小于p,如果存在右子树,那么它右子树上的点都大于p。
因此根据这个性质,我们可以知道如果这两个节点的值都小于p,则他两个一定在p的左子树上,如果都大于p,则一定在其右子树上。
递归:
class Solution{ public: TreeNode* lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q){ 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; } } };
非递归:
class Solution{ public: TreeNode *lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q){ while(1){ if(max(p->val, q->val) < root->val){ root = root->left; } else if(min(p->val, q->val) > root->val){ root = root->right; } else{ return root; } } } };
相关文章推荐
- socket新特性之SO_REUSEPORT
- 集合竞价 CCF java实现 (大部分代码是借鉴的别人的,)
- JavaScript正则表达式
- Ext基础一(转载)
- 程序改错
- iOS图片裁剪
- Activation operating system
- hibernate实现多表联合查询
- Linux服务器通过AWS命令行上传文件至S3
- 3.7女生节:被程序员男友送的奇葩礼物宠哭了
- 手把手教你做爬虫---基于NodeJs
- 矩阵连乘问题的算法分析
- swift gcd 延时调用封装
- [疯狂Java]AWT:菜单栏、菜单、菜单项、菜单事件处理
- maven环境快速搭建
- Linux日志不记录问题
- 重载,继承
- JavaScript之函数基础
- 数据 (cdq分治)
- 回文数,求数字的和