236. Lowest Common Ancestor of a Binary Tree

来源:互联网 发布:网络教育专科学费 编辑:程序博客网 时间:2024/05/29 19:40

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.



import java.util.ArrayList;import java.util.List;public class Solution {List<TreeNode> plist;List<TreeNode> qlist;List<TreeNode> tmp = new ArrayList<TreeNode>();    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if(p == q)return p;                tmp.add(root);    dfs(root, p, q);    tmp.remove(root);        for(int i=plist.size()-1; i>=0; i--) {    if(qlist.contains(plist.get(i)))    return plist.get(i);    }        return null;    }private void dfs(TreeNode root, TreeNode p, TreeNode q) {    if(root == null)return;    if(root == p){plist = new ArrayList<TreeNode>(tmp);}if(root == q){qlist = new ArrayList<TreeNode>(tmp);}tmp.add(root.left);    dfs(root.left, p, q);    tmp.remove(root.left);        tmp.add(root.right);    dfs(root.right, p, q);    tmp.remove(root.right);}}


0 0
原创粉丝点击