Number of Nodes in the Sub-Tree With the Same Label - Problem

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.

Input & Output

Example 1 — Basic Tree
$ 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]
💡 Note: Node 0 (label 'a'): subtree has nodes 0,1,2,3,4,5,6 with labels 'abaedcd', count of 'a' = 2. Node 1 (label 'b'): subtree has nodes 1,4,5 with labels 'bed', count of 'b' = 1.
Example 2 — All Same Labels
$ Input: n = 4, edges = [[0,1],[1,2],[0,3]], labels = "bbbb"
Output: [4,2,1,1]
💡 Note: All nodes have label 'b'. Node 0's subtree contains all 4 nodes. Node 1's subtree contains nodes 1,2 (2 nodes). Leaves 2,3 each contain only themselves.
Example 3 — Single Path
$ Input: n = 3, edges = [[0,1],[1,2]], labels = "abc"
Output: [1,1,1]
💡 Note: Each node has a unique label, so each subtree contains only 1 node with its own label.

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

Visualization

Tap to expand
Sub-Tree Nodes with Same Label INPUT a 0 b 1 a 2 e 4 d 5 c 3 d 6 n = 7, root = 0 labels = "abaedcd" edges: [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]] Node labels shown in circles Node indices shown above ALGORITHM STEPS 1 Build Adjacency List Convert edges to graph 2 DFS from Root Traverse tree post-order 3 Count Labels Track 26 chars per subtree 4 Merge Counts Bubble up counts to parent DFS Traversal Order 7 3 6 1 2 4 5 Numbers show visit order (post-order) FINAL RESULT 2 a 1 b 1 a 1 e 1 d 1 c 1 d Counts shown in nodes Output Array: 2 1 1 1 1 1 1 Node 0 (label 'a') has 2 nodes with 'a' in its subtree (0 and 2) Key Insight: Use DFS with a count array of size 26 (for each letter) at every node. After visiting all children, merge their counts into the current node's count array. The answer for each node is the count of its own label in its merged subtree array. Time: O(26n) = O(n), Space: O(n) for recursion stack. TutorialsPoint - Number of Nodes in the Sub-Tree With the Same Label | Optimized DFS with Label Counting
Asked in
Amazon 15 Microsoft 12 Google 8
28.5K Views
Medium Frequency
~25 min Avg. Time
890 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen