LeetCode:Lowest Common Ancestor of a Binary Search Tree
2015-11-15 11:53
232 查看
Lowest Common Ancestor of a Binary Search Tree
Total Accepted: 37087 TotalSubmissions: 97884 Difficulty: Easy
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
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.
Subscribe to see which companies asked this question
Hide Tags
Tree
Hide Similar Problems
(M) Lowest Common Ancestor of a Binary Tree
code:
/** * 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 == root || q == root) return root; // 有结点是root,返回结果 int flag1 = p->val < root->val ? 1:0; int flag2 = q->val > root->val ? 1:0; if(!(flag1 ^ flag2)) // (1,1)(0,0)如果p、q一个在左、一个在右,root即为最小公共祖先 return root; else if(flag1) // (1,0) p、q都在左边,遍历左子树 return lowestCommonAncestor(root->left, p, q); else // (0,1) p、q都在右边,遍历右子树 return lowestCommonAncestor(root->right, p, q); } };
相关文章推荐
- 大道至简七八章读后感
- Android Volley源码分析(二) 核心功能解析
- cenos7.1 安装openstack kilo 心得之五 安装Database
- 利用未授权的redis写webshell
- 位运算
- 深入浅析JavaScript中prototype和proto的关系
- linux 查看文件(夹)大小
- Flask Web开发
- java之Class Loading Architecture --《Java_Security_2nd_Edition》
- Qt 窗口等设置
- fullfile
- shell读取文件每一行的方式
- Ollydbg
- 编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- C#控件缩写
- C语言编程技巧
- 一位老医生的长寿忠告
- Python logging模块使用记录
- Android线程池的使用(未完)
- virtio驱动分析之libvirt层的参数配置