Leetcode 236: Lowest Common Ancestor of a Binary Tree, leetcodeancestor

Source: Internet
Author: User

Leetcode 236: Lowest Common Ancestor of a Binary Tree, leetcodeancestor
Lowest Common Ancestor of a Binary TreeTotal Accepted:1628Total Submissions:5660

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 allowA node to be a descendant of itself)."

        _______3______       /              \    ___5__          ___1__   /      \        /      \   6      _2       0       8         /  \         7   4

For example, the lowest common ancestor (LCA) of nodes5And1Is3. Another example is LCA of nodes5And4Is5, Since a node can be a descendant of itself according to the LCA definition.

[Idea]

If it is a common Binary Tree, rather than a BST. then we should traverse the node and find p, q. at the same time, record the path from root to this point. then compare the path, and the last same node is LCA.

[CODE]

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    //2, 1    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if(root==null || p==null || q==null) return null;                List<TreeNode> pathp = new ArrayList<>();        List<TreeNode> pathq = new ArrayList<>();        pathp.add(root);        pathq.add(root);                getPath(root, p, pathp);        getPath(root, q, pathq);                TreeNode lca = null;        for(int i=0; i<pathp.size() && i<pathq.size(); i++) {            if(pathp.get(i) == pathq.get(i)) lca = pathp.get(i);            else break;        }        return lca;    }        private boolean getPath(TreeNode root, TreeNode n, List<TreeNode> path) {        if(root==n) {            return true;        }                if(root.left!=null) {            path.add(root.left);            if(getPath(root.left, n, path)) return true;            path.remove(path.size()-1);        }                if(root.right!=null) {            path.add(root.right);            if(getPath(root.right, n, path)) return true;            path.remove(path.size()-1);        }                return false;    }}


Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.