题解 | #在二叉树中找到两个节点的最近公共祖先#

在二叉树中找到两个节点的最近公共祖先

https://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116

分别用两个数组记录寻找到o1和o2的路径上的值,同时遍历两数组,最后一个相等的数就是他们的最近公共祖先。
class Solution {
public:
    bool flag=0;
    void path(TreeNode* root,vector<int>& p,int o){
        if(root->val==o){
            flag=1;
            return;
        }
        if(root->left){
            p.push_back(root->left->val);
            path(root->left,p,o);
            if(!flag) p.pop_back();
            else return;
        }
        
        if(root->right){
            p.push_back(root->right->val);
            path(root->right,p,o);
            if(!flag) p.pop_back();
            else return;
        }
    }
    int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
        // write code here
        vector<int> p1,p2;
        p1.push_back(root->val);
        p2.push_back(root->val);
        path(root,p1,o1);
        flag=0;
        path(root,p2,o2);
        int n=min(p1.size(),p2.size()),res;
        for(int i=0;i<n;i++){
            if(p1[i]==p2[i] && p1[i+1]!=p2[i+1]){
                res=p1[i];
                break;
            }
        }
        return res;
    }
};


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务