其他分享
首页 > 其他分享> > 最近公共祖先

最近公共祖先

作者:互联网

bool get_node_path(TreeNode* root,TreeNode* n, vector<TreeNode*> &path){
    if(root==NULL)return false;
    if(root==n || get_node_path(root->left,n,path) || get_node_path(root->right,n,path)){
        path.emplace_back(root);
        return true;
    }
    return false;
}

TreeNode* get_last_common_node(vector<TreeNode*> &path1,vector<TreeNode*> &path2){
    TreeNode* result;
    for(int i=path1.size()-1,j=path2.size()-1;i>=0 && j>=0;--i,--j){
        if(path1[i]==path2[j])result=path1[i];
        else break;
    }
    return result;
}

TreeNode* get_last_common_parent(TreeNode* root,TreeNode* p,TreeNode* q){
    if(root==NULL || p==NULL || q==NULL)return NULL;

    vector<TreeNode*> path1;
    get_node_path(root,p,path1);
    vector<TreeNode*> path2;
    get_node_path(root,q,path2);

    return get_last_common_node(path1,path2);
}

参考:

1. 《剑指offer》- 7.2案例二

标签:node,path1,TreeNode,get,祖先,最近,公共,path,root
来源: https://blog.csdn.net/yushi819/article/details/112517193