Lowest Common Ancestor of a Binary Search Tree(二叉查找树的最近公共父亲节点)
【难度: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).”
For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.
给定一个二叉查找树和所要查找的两个节点,找到这两个节点的最近公共父亲节点。如图,节点2和8的LCA是6,节点2和4的LCA是2。
解题思路
根据LCA的定义和BST的特性,当root非空时可以区分为三种情况:1)两个节点均在root的左子树,此时对root->left递归求解;2)两个节点均在root的右子树,此时对root->right递归求解;3)两个节点分别位于root的左右子树,此时LCA为root。
c++代码如下:
/** * 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 == NULL)
return root;
if (p->val > root->val && q->val > root->val) {
return lowestCommonAncestor(root->right,p,q);
} else if (p->val < root->val && q->val < root->val) {
return lowestCommonAncestor(root->left,p,q);
}
return root;
}
};