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

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

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;
    }
};


全部评论

相关推荐

没有offer的呆呆:薪资有的时候也能说明一些问题,太少了活不活得下去是一方面,感觉学习也有限
点赞 评论 收藏
分享
03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务