day21 最近公共祖先

如果left 和 right都不为空,说明此时root就是最近公共节点。

 

如果left为空,right不为空,就返回right,说明目标节点是通过right返回的,反之依然。

 

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == q || root == p || root == NULL) return root;
        TreeNode* left = lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);
        if (left != NULL && right != NULL) return root;

        if (left == NULL && right != NULL) return right;
        else if (left != NULL && right == NULL) return left;
        else  { //  (left == NULL && right == NULL)
            return NULL;
        }

    }

 

你可能感兴趣的:(算法)