Lowest Common Ancestor of a Binary Search Tree
Solution:
#include <iostream>
using namespace std;
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) {
assert( p != NULL && q != NULL);
if (root == NULL)
return NULL;
if ( p->val < root->val && q->val < root->val )
return lowestCommonAncestor( root->left, p, q);
if ( p->val > root->val && q->val > root->val )
return lowestCommonAncestor( root->right, p, q);
return root;
}
};
总结:
说一下二分搜索树的概念吧:每个结点的键值大于左孩子,每个结点的键值小于右孩子,以左右孩子为根的子树仍为二分搜索树。这个概念本身就是递归定义的。