原题目:
235. Lowest Common Ancestor of a Binary Search Tree
读题:
本文题目是查找二叉搜索树的两个节点的最近公共祖先,有两个点
1)对象是二叉搜索树,左子树的节点均小于根节点,右子树的节点均大于根节点
2)公共祖先可能有很多个,取最近的那个
解题思路:
由于是二叉搜索树,用递归就比较简单了,如果p,q节点值均大于root节点值,那么必定在右子树,若均小于,则在左子树,若一大一小,则必然是root节点为最近公共祖先
class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { int min = 0; int max = 0; if(NULL == root || NULL == p || NULL == q) { return NULL; } if(root == q || root == p) { return root; } min = (p->val > q->val)?q->val:p->val; max = (p->val > q->val)?p->val:q->val; if(max < root->val) { return lowestCommonAncestor(root->left,p,q); } if(min > root->val) { return lowestCommonAncestor(root->right,p,q); } return root; } };