最近公共祖先

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案例二

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值