leetcode 春季比赛3题 二叉搜索树染色
其实和二叉搜索树一点关系都没有。
每个点的颜色只取决于最后一次包含该点的操作。用 set 维护所有颜色待确定的点,倒序处理询问,每次利用 lower_bound 方法从 set 中取出所有在询问范围内的点染色后删掉。因为每个点只会被删掉一次,所以总体复杂度 \mathcal{O}((n + q)\log n)O((n+q)logn),其中 nn 是节点数量,qq 是询问数量。
作者:tsreaper
链接:https://leetcode-cn.com/problems/QO5KpG/solution/by-tsreaper-d64z/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
import java.util.TreeSet; /** * Definition for a binary tree node. public class TreeNode { int val; TreeNode * left; TreeNode right; TreeNode(int x) { val = x; } } */ class Solution { void travel(TreeNode root, TreeSet<Integer> list) { if (root != null) { list.add(root.val); travel(root.right, list); travel(root.left, list); } } public int getNumber(TreeNode root, int[][] ops) { TreeSet<Integer> set = new TreeSet<>(); travel(root, set); int ans = 0; for (int i = ops.length - 1; i >= 0; i--) { int l = ops[i][1]; int a; while (set.ceiling(l) != null && (a = set.ceiling(l)) <= ops[i][2]) { set.remove(a); if (ops[i][0] == 1){ ans++; } } } return ans; } }

浙公网安备 33010602011771号