There is an undirected tree with n nodes labeled from 1 to n, rooted at node 1. The tree is represented by a 2D integer array edges of length n - 1, where edges[i] = [ui, vi] indicates that there is an edge between nodes ui and vi.
Initially, all edges have a weight of 0. You must assign each edge a weight of either 1 or 2.
The cost of a path between any two nodes u and v is the total weight of all edges in the path connecting them.
Select any one node x at the maximum depth. Return the number of ways to assign edge weights in the path from node 1 to x such that its total cost is odd.
Since the answer may be large, return it modulo109 + 7.
Note: Ignore all edges not in the path from node 1 to x.
Β
Example 1:
Input:edges = [[1,2]]
Output:1
Explanation:
The path from Node 1 to Node 2 consists of one edge (1 β 2).
Assigning weight 1 makes the cost odd, while 2 makes it even. Thus, the number of valid assignments is 1.
Example 2:
Input:edges = [[1,2],[1,3],[3,4],[3,5]]
Output:2
Explanation:
The maximum depth is 2, with nodes 4 and 5 at the same depth. Either node can be selected for processing.
For example, the path from Node 1 to Node 4 consists of two edges (1 β 3 and 3 β 4).
Assigning weights (1,2) or (2,1) results in an odd cost. Thus, the number of valid assignments is 2.
Β
Constraints:
2 <= n <= 105
edges.length == n - 1
edges[i] == [ui, vi]
1 <= ui, vi <= n
edges represents a valid tree.
Solutions
Solution 1: DFS + Mathematics
First, we build an adjacency list \(g\) from the edges, where \(g[u]\) contains all neighbors of node \(u\).
Next, we use a function \(\textit{dfs}\) to compute the depth \(d\) of the tree. The answer is the number of ways to choose an odd number of elements from \(d\). According to a well-known combinatorial identity, the number of ways to choose an odd number of elements from a set of size \(d\) is \(2^{d-1}\). Therefore, we can compute the answer using fast exponentiation.
The time complexity is \(O(n)\), and the space complexity is \(O(n)\), where \(n\) is the number of nodes in the tree.