【寻找公共祖先(普通二叉树)】BJ某IT厂面试题

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”题解,利用HashMap+HashSet技术栈解决。

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        HashMap<TreeNode, TreeNode> map = new HashMap<>();
        map.put(root, null);
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            TreeNode poll = queue.poll();
            if (poll.left != null) {
                map.put(poll.left, poll);
                queue.offer(poll.left);
            }
            if (poll.right != null) {
                map.put(poll.right, poll);
                queue.offer(poll.right);
            }
        }
        HashSet<TreeNode> set = new HashSet<>();
        while (map.containsKey(p)) {
            set.add(p);
            p = map.get(p);
        }
        while (!set.contains(q)) {
            q = map.get(q);
        }
        return q;
    }

你可能感兴趣的:(java,开发语言)