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;
    }
}

 

posted @ 2022-04-16 21:04  fishcanfly  阅读(52)  评论(0)    收藏  举报
//雪花飘落效果