题解 | #二叉搜索树的最近公共祖先#
二叉搜索树的最近公共祖先
https://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @param p int整型 * @param q int整型 * @return int整型 */ void CollectAllFatherNodes(TreeNode* root,int target,vector<int> &allFathers) { while(true) { allFathers.push_back(root->val); if(root->val < target) { root = root->right; } else if(root->val > target) root = root->left; else { allFathers.push_back(root->val); return; } } } int lowestCommonAncestor(TreeNode* root, int p, int q) { // write code here vector<int> pCon; vector<int> qCon; CollectAllFatherNodes(root,p,pCon); CollectAllFatherNodes(root,q,qCon); int ans = 0; for(int i = 0;i<pCon.size() && i<qCon.size() ;i++) { if(pCon[i] == qCon[i]) ans = pCon[i]; else break; } return ans; } };