https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/
1. Use recursion:
//40 ms 23.5 MB/*** 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) return NULL;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);elsereturn root;}};
2. Use iteration:
//44 ms 23.3 MB/*** 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) return NULL;while(root){if(p->val > root->val && q->val > root->val)root = root->right;else if(p->val < root->val && q->val < root->val)root = root->left;elsereturn root;}return NULL;}};
