236. Lowest Common Ancestor of a Binary Tree(LCA)

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
        _______3______
       /              \
    ___5__          ___1__
   /      \        /      \
   6      _2       0       8
         /  \
         7   4
For example, the lowest common ancestor (LCA) of nodes  5 and  1 is  3. Another example is LCA of nodes  5 and  4 is  5, since a node can be a descendant of itself according to the LCA definition. 题目思路: 对于给定的一般的二叉树,和两个给定的结点a和b,寻找a和b的最低的公共祖先。 试想,从根结点向左右子树,寻找a和b,如果左子树中没找到,那么LCA一定在右子树中,反之亦然。 如果分别在左右子树找到a,b,那么当前根结点就是LCA。
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(!root || root == p || root == q) return root;
        TreeNode* left = lowestCommonAncestor(root->left,p,q);
        TreeNode* right = lowestCommonAncestor(root->right,p,q);
        if(!left) return right;
        if(!right) return left;
        return root;
    }
};
   

查看原文: http://iluhao.top/archives/629

你可能感兴趣的:(236. Lowest Common Ancestor of a Binary Tree(LCA))