LeetCode:Lowest Common Ancestor of a Binary Search Tree(BST最近公共祖先)
2015-08-14 15:26
501 查看
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
思路:BST二叉查找树的LCA情况
查找两个node的最早的公共祖先,分三种情况:
1. 如果两个node在root的两边,那么最早的公共祖先就是root。
2. 如果两个node在root的左边,那么把root.leftChild作为root,再递归。
3. 如果两个node在root的右边,那么把root.rightChild作为root,再递归。
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.
思路:BST二叉查找树的LCA情况
查找两个node的最早的公共祖先,分三种情况:
1. 如果两个node在root的两边,那么最早的公共祖先就是root。
2. 如果两个node在root的左边,那么把root.leftChild作为root,再递归。
3. 如果两个node在root的右边,那么把root.rightChild作为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(!p||!q||!root) 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; } };
相关文章推荐
- EntityFramework中常用的数据修改方式
- 利用ViewPager+Fragment+actionbar实现可左右滑动的Action Tab
- 每日一题(15)——Digit Root(大数)
- BACnet协议开发
- 深度优先搜索——迷宫问题(华为oj)
- ubuntu redis-server
- C++指针详解
- [HEOI2014][BZOJ3611] 大工程|虚树|树型dp|dfs序|树上倍增LCA
- 关于DMARC协议
- 一个空循环的问题
- webservice框架jersey简单总结
- 每日一题(14)——找到符合要求的整数
- PHP数据库操作总结
- Riak的配置
- 新安装的linux(linux mint 或则ubuntu)系统中安装postgresql-xc安装的包
- jQuery动画
- linux 脚本小试系列
- 杭电4324Triangle LOVE三角恋
- Android中的帧动画与补间动画的使用
- 人才泡沫:百度腾讯阿里挖人各出奇招