[LeetCode]Lowest Common Ancestor of a Binary Search Tree
2015-07-18 22:59
393 查看
思路:
利用二分搜索树的性质,当找到一个node,满足 ( p->val - node->val ) * ( q->val - node->val ) <= 0时,即说明p和q在node的两边,或者p与q有一个就是node
1,先决条件:p和q存在于BST上
2,不变式:先判断是否满足结束条件,然后再通过比较决定 下一步进入左子树还是右子树(判断左右子树是否为空);
3,结束条件:找到node满足 ( p->val - node->val ) * ( q->val - node->val ) <= 0
4,临界条件:root没有左右子树
// 顺利一遍过
利用二分搜索树的性质,当找到一个node,满足 ( p->val - node->val ) * ( q->val - node->val ) <= 0时,即说明p和q在node的两边,或者p与q有一个就是node
1,先决条件:p和q存在于BST上
2,不变式:先判断是否满足结束条件,然后再通过比较决定 下一步进入左子树还是右子树(判断左右子树是否为空);
3,结束条件:找到node满足 ( p->val - node->val ) * ( q->val - node->val ) <= 0
4,临界条件:root没有左右子树
// 顺利一遍过
/** * 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->left == NULL && root->right == NULL){ return NULL; } if ((p->val - root->val) * (q->val - root->val) <= 0 ){ return root; } if ( (p->val > root->val) && (q->val > root->val) ){ if (root->right != NULL) return lowestCommonAncestor(root->right, p, q); else return NULL; }else if ( (p->val < root->val) && (q->val < root->val) ){ if (root->left != NULL) return lowestCommonAncestor(root->left, p, q); else return NULL; } } };
相关文章推荐
- POJ 题目3169 Layout(差分约束)
- cinder的手工搭建
- 树的非递归遍历(中序遍历)
- android 文件存储 Internal storage External storage
- Java高质量代码之 — 泛型与反射
- 树的非递归遍历(中序遍历)
- android http post
- iOS常用正则表达式
- ubuntu下编译neovim
- [LeetCode]Power of Two
- 19 Remove Nth Node From End of List
- 车载软件未来趋势
- wpf Application类的解释
- [POJ3264]Balanced Lineup
- 关于classpath
- Fork/Join框架介绍(转)
- 次优查找树的建立
- dashboard的手工搭建
- 启动安卓模拟器时出现 The connection to adb is down, and a severe error has occured
- 随机字符串