为树中的节点添加颜色

Posted

技术标签:

【中文标题】为树中的节点添加颜色【英文标题】:adding colors to nodes in tree 【发布时间】:2021-12-13 02:23:35 【问题描述】:

我有一棵树,我的任务是找到为节点着色所需的最小颜色数,这样同一个父节点的两个子节点不会共享相同的颜色,父子节点也不共享相同的颜色。

示例:

number of edges = 5
root = 1

The edges are:

1 2
1 4
2 3
3 5
4 6

输出:

3

这是我尝试过的代码:

public static int process(int nodes, int root, int[][] edges) 
    int output = 0;
    Map<Integer, List<Integer>> map = new HashMap<>();
    for (int i = 0; i < edges.length; i++) 
        int key = edges[i][0];
        List<Integer> v = map.getOrDefault(key, new ArrayList<>());
        map.put(key, v);
        v.add(edges[i][1]);
    

    Set<Integer> set = new HashSet<>();

    for (int k : map.keySet()) 
        List<Integer> list = map.get(k);
        if (set.add(k)) 
            output++;
        
        for (int n : list) 
            if (set.add(n)) 
                output++;
            
        
    
    return output;

此代码不正确,因为我正在向集合中添加元素并决定需要多少颜色。解决这个问题的正确方法是什么

【问题讨论】:

【参考方案1】:

最小颜色数等于单个节点的最大子节点数加一。着色很简单:用不同的颜色给根和它的孩子着色。然后用不同于父级颜色的颜色为已经着色的子级的子级着色,以此类推。

【讨论】:

以上是关于为树中的节点添加颜色的主要内容,如果未能解决你的问题,请参考以下文章

干货红黑树那点事儿

动态规划帮助:二叉树成本边

如何有效地检索树中节点的路径(与帖子“将平面表解析为树?”相关)

红黑树之删除节点

关于Unity中的光源

在java中如何响应单击JTree树中一个节点?