LeetCode235.二叉搜索树的最近公共祖先

题目

 1 class Solution {
 2 public:
 3     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
 4         if((p->val - root->val) * (q->val - root->val)<0) return root;
 5         //if(root == p ) return p;
 6         //if(root == q) return q;
 7         if(p->val < root->val && q->val < root->val) return lowestCommonAncestor(root->left,p,q);
 8         if(p->val > root->val && q->val > root->val) return lowestCommonAncestor(root->right,p,q);
 9         return root;
10     }
11 };

官方答案,学习

 1 class Solution {
 2 public:
 3     vector<TreeNode*> getPath(TreeNode* root,TreeNode* target){
 4         vector<TreeNode*>path;
 5         TreeNode* node = root;
 6         while(node!=target){
 7             path.push_back(node);
 8             if(target->val > node->val) node = node->right;
 9             else node = node->left;
10         }
11         path.push_back(node);
12         return path;
13     }
14     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
15         vector<TreeNode*>path_p = getPath(root,p);
16         vector<TreeNode*>path_q = getPath(root,q);
17         TreeNode* ancestor;
18         for(int i = 0;i < path_p.size() && i < path_q.size();i++){
19             if(path_p[i] == path_q[i]) ancestor = path_p[i];
20             else break;
21         }
22         return ancestor;
23 
24     }
25 };

 

posted @ 2021-01-04 16:39  Uitachi  阅读(70)  评论(0编辑  收藏  举报