DEV Community

Cover image for 1519. Number of Nodes in the Sub-Tree With the Same Label
Harsh Rajpal
Harsh Rajpal

Posted on

2

1519. Number of Nodes in the Sub-Tree With the Same Label

Problem Statement:

You are given a tree (i.e. a connected, undirected graph that has no cycles) consisting of n nodes numbered from 0 to n - 1 and exactly n - 1 edges. The root of the tree is the node 0, and each node of the tree has a label which is a lower-case character given in the string labels (i.e. The node with the number i has the label labels[i]).

The edges array is given on the form edges[i] = [ai, bi], which means there is an edge between nodes ai and bi in the tree.

Return an array of size n where ans[i] is the number of nodes in the subtree of the ith node which have the same label as node i.

A subtree of a tree T is the tree consisting of a node in T and all of its descendant nodes.

Example 1:
Input: n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], labels = "abaedcd"
Output: [2,1,1,1,1,1,1]
Explanation: Node 0 has label 'a' and its sub-tree has node 2 with label 'a' as well, thus the answer is 2. Notice that any node is part of its sub-tree.
Node 1 has a label 'b'. The sub-tree of node 1 contains nodes 1,4 and 5, as nodes 4 and 5 have different labels than node 1, the answer is just 1 (the node itself).

Example 2:
Input: n = 4, edges = [[0,1],[1,2],[0,3]], labels = "bbbb"
Output: [4,2,1,1]
Explanation: The sub-tree of node 2 contains only node 2, so the answer is 1.
The sub-tree of node 3 contains only node 3, so the answer is 1.
The sub-tree of node 1 contains nodes 1 and 2, both have label 'b', thus the answer is 2.
The sub-tree of node 0 contains nodes 0, 1, 2 and 3, all with label 'b', thus the answer is 4.

Example 3:
Input: n = 5, edges = [[0,1],[0,2],[1,3],[0,4]], labels = "aabab"
Output: [3,2,1,1,1]

Constraints:

  • 1 <= n <= 105
  • edges.length == n - 1
  • edges[i].length == 2
  • 0 <= ai, bi < n
  • ai != bi
  • labels.length == n
  • labels is consisting of only of lowercase English letters.

Solution:
Code:

class Solution {
    private int[] ans;
    private List<List<Integer>> adjlist;
    private Set<Integer> visited;
    public int[] countSubTrees(int n, int[][] edges, String labels) {
        ans= new int[n];
        adjlist=new ArrayList<>(n);
        for(int i=0;i<n;i++){
            adjlist.add(new ArrayList<>());
        }
        for(int[] e: edges){
            adjlist.get(e[0]).add(e[1]);
            adjlist.get(e[1]).add(e[0]);
        }
        visited=new HashSet<Integer>(n);
        dfs(0,labels);
        return ans;

    }
    private int[] dfs(int node, String labels){
        visited.add(node);
        int[] count=new int[26];
        for(int adj:adjlist.get(node)){
            if(!visited.contains(adj)){
                int[] adjcount=dfs(adj,labels);
                for(int i=0;i<26;i++){
                    count[i]+=adjcount[i];
                }
            }
        }
        char ch=labels.charAt(node);
        count[ch-'a']++;
        ans[node]=count[ch-'a'];
        return count;

    }
}
Enter fullscreen mode Exit fullscreen mode

Image of Datadog

Create and maintain end-to-end frontend tests

Learn best practices on creating frontend tests, testing on-premise apps, integrating tests into your CI/CD pipeline, and using Datadog’s testing tunnel.

Download The Guide

Top comments (2)

Collapse
 
dhruvermafz profile image
Dhruv verma

hey stranger, btw, same batch, and same field WEB DEVELOPMENT, thank you for this solution, i just found a correction in my code with the help of your code

Collapse
 
harshrajpal profile image
Harsh Rajpal

Hey, happy that I was able to help you :)

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay