KK's blog

每天积累多一些

0%

LeetCode 1522 Diameter of N-Ary Tree

LeetCode



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, 10<sup>4</sup>].

题目大意:

求树的直径:任何两个节点的最大距离

解题思路:

类似于LeetCode 543 Diameter of Binary Tree,但此题为N叉树

解题步骤:

DFS

注意事项:

  1. 求数组中最大的两数和,用去掉最大值的方法得到次大值。还要注意初始值加入[1, 1],避免没有儿子节点或只有一个的情况

Python代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def diameter(self, root: 'Node') -> int:
max_len = 0

def dfs(root):
if not root:
return 0
nonlocal max_len
path_len = [1, 1]
for child in root.children:
path_len.append(dfs(child) + 1)
largest = max(path_len)
path_len.remove(largest)
second_largest = max(path_len)
total = largest + second_largest - 1
max_len = max(total, max_len)
return largest

dfs(root)
return max_len - 1

算法分析:

时间复杂度为O(n),空间复杂度O(n)

Free mock interview