[leetcode] 235. Lowest Common Ancestor of a Binary Search Tree
2016-03-08 17:16
387 查看
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
Another example is LCA of nodes
since a node can be a descendant of itself according to the LCA definition.
这道题是给出二叉搜索树中两个节点,找他们的最低祖先节点,题目难度为Easy。
根据题目中LCA的定义和二叉搜索树的特点,我们可以遍历二叉搜索树,如果当前节点值比两个节点值都大,说明LCA在左子树中;如果当前节点值比两个节点值都小,说明LCA在右子树中;如果介于两者之间,说明当前节点即是LCA。题目比较简单,就不推荐递归的做法了。具体代码:
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.
这道题是给出二叉搜索树中两个节点,找他们的最低祖先节点,题目难度为Easy。
根据题目中LCA的定义和二叉搜索树的特点,我们可以遍历二叉搜索树,如果当前节点值比两个节点值都大,说明LCA在左子树中;如果当前节点值比两个节点值都小,说明LCA在右子树中;如果介于两者之间,说明当前节点即是LCA。题目比较简单,就不推荐递归的做法了。具体代码:
class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { TreeNode* node = root; if(!root || !p || !q) return NULL; int maxVal = max(p->val, q->val); int minVal = min(p->val, q->val); while(node) { if(node->val > maxVal) node = node->left; else if(node->val < minVal) node = node->right; else return node; } } };
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解