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

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

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

用DFS
如果root->val等于o1或者o2,就返回o1或者o2
如果左右子树一个返回o1一个返回o2,那就返回当前节点的val,因为这就是要找的节点。
如果左右子树中有某一个返回了不是-1也不是o1o2,那就说明那底下有要找的节点,直接返回他返回的值。
如果都不是就返回-1。

class Solution {
public:

    int dfs(TreeNode* root, int o1, int o2)
    {
        int left = -1, right = -1;
        if(root->val == o1) return o1;
        if(root->val == o2) return o2;
        if(root->left)
            left = dfs(root->left, o1, o2);
        if(root->right)
            right = dfs(root->right, o1, o2);
        if(left == o1 && right == o2 || right == o1 && left == o2)
            return root->val;
        else if(left == o1 || right == o1)
            return o1;
        else if(left == o2 || right == o2)
            return o2;
        else
            return left != -1 ? left : right;
    }

    int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
        return dfs(root, o1, o2);
    }
};
全部评论

相关推荐

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