1676. 二叉树的最近公共祖先 IV

给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA)。数组(列表)中所有节点都存在于该二叉树中,且二叉树中所有节点的值都是互不相同的。

我们扩展二叉树的最近公共祖先节点在维基百科上的定义:“对于任意合理的 i 值, n 个节点 p1 、 p2、...、 pn 在二叉树 T 中的最近公共祖先节点是后代中包含所有节点 pi 的最深节点(我们允许一个节点是其自身的后代)”。一个节点 x 的后代节点是节点 x 到某一叶节点间的路径中的节点 y。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    private Set<TreeNode> need;

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode[] nodes) {
        need = new HashSet<>();
        need.addAll(Arrays.asList(nodes));
        TreeNode node = find(root);
        return need.size() == 0 ? node : null;
    }

    private TreeNode find(TreeNode root) {
        if (root == null) {
            return null;
        }
        TreeNode left = find(root.left);
        TreeNode right = find(root.right);
        if (need.contains(root)) {
            need.remove(root);
            return root;
        }
        if (left != null && right != null) {
            return root;
        }
        return left != null ? left : right;
    }
}
posted @ 2023-03-20 23:58  Tianyiya  阅读(46)  评论(0)    收藏  举报