题目地址:
https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree-iv/
给定一棵二叉树及其中的若干节点,求这些节点的最近公共祖先。
类似求两个节点的最近公共祖先来做即可。代码如下:
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode[] nodes) {
Set<TreeNode> set = new HashSet<>(Arrays.asList(nodes));
return dfs(root, set);
}
private TreeNode dfs(TreeNode root, Set<TreeNode> set) {
if (root == null) {
return null;
}
if (set.contains(root)) {
return root;
}
TreeNode left = dfs(root.left, set), right = dfs(root.right, set);
if (left != null && right != null) {
return root;
}
return left == null ? right : left;
}
}
class TreeNode {
int val;
TreeNode left, right;
public TreeNode(int val) {
this.val = val;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( max { h , k } ) O(\max\{h, k\}) O(max{h,k}), k k k是要求最近公共祖先的节点个数。