LeetCode 1522. Diameter of N-Ary Tree Solution in Java, C++, Python & Go | Explanation + Code

CoderIndeed
0
1522. Diameter of N-Ary Tree

Description

Given a root of an N-ary tree, you need to compute the length of the diameter of the tree.

The diameter of an N-ary tree is the length of the longest path between any two nodes in the tree. This path may or may not pass through the root.

(Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value.)

 

Example 1:

Input: root = [1,null,3,2,4,null,5,6]
Output: 3
Explanation: Diameter is shown in red color.

Example 2:

Input: root = [1,null,2,null,3,4,null,5,null,6]
Output: 4

Example 3:

Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
Output: 7

 

Constraints:

  • The depth of the n-ary tree is less than or equal to 1000.
  • The total number of nodes is between [1, 104].

Solutions

Solution 1

PythonJavaC++Go
""" # Definition for a Node. class Node: def __init__(self, val=None, children=None): self.val = val self.children = children if children is not None else [] """ class Solution: def diameter(self, root: 'Node') -> int: """ :type root: 'Node' :rtype: int """ def dfs(root): if root is None: return 0 nonlocal ans m1 = m2 = 0 for child in root.children: t = dfs(child) if t > m1: m2, m1 = m1, t elif t > m2: m2 = t ans = max(ans, m1 + m2) return 1 + m1 ans = 0 dfs(root) return ans(code-box)

Solution 2

PythonJavaC++Go
""" # Definition for a Node. class Node: def __init__(self, val=None, children=None): self.val = val self.children = children if children is not None else [] """ class Solution: def diameter(self, root: 'Node') -> int: """ :type root: 'Node' :rtype: int """ def build(root): nonlocal d if root is None: return for child in root.children: d[root].add(child) d[child].add(root) build(child) def dfs(u, t): nonlocal ans, vis, d, next if u in vis: return vis.add(u) for v in d[u]: dfs(v, t + 1) if ans < t: ans = t next = u d = defaultdict(set) vis = set() build(root) ans = 0 next = None dfs(root, 0) vis.clear() dfs(next, 0) return ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !