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

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

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

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
private:
        unordered_map<int, TreeNode*>ret;
public:
    /**
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
    int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
        // write code here
        vector<int>path;
        dfs(root);
        ret[root->val]=nullptr;
        TreeNode*oo1=ret[o1];
        TreeNode*oo2=ret[o2];
        path.emplace_back(o1);
        while(oo1){
            path.emplace_back(oo1->val);
            oo1=ret[oo1->val];
        }
        while(oo2){
            if(find(path.begin(),path.end(),o2)!=path.end())return o2;
            if(find(path.begin(),path.end(),oo2->val)!=path.end())return oo2->val;
            oo2=ret[oo2->val];
        }
        return -1;
    }
    
    void dfs(TreeNode*root){
        if(root->left){
            ret[root->left->val]=root;
            dfs(root->left);
        }
        if(root->right){
            ret[root->right->val]=root;
            dfs(root->right);
        }
    }
    
};

此题目关键是获取父节点的节点,因此可以深度遍历然后反向遍历。
全部评论

相关推荐

11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务