1522. Diameter of N-Ary Tree
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:
Example 2:
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]
.
Solution:
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {
children = new ArrayList<Node>();
}
public Node(int _val) {
val = _val;
children = new ArrayList<Node>();
}
public Node(int _val,ArrayList<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
int result = 0;
public int diameter(Node root) {
if (root.children.size() == 0){
return 0;
}
height(root);
return result;
}
public int height(Node root){
if (root == null){
return 0;
}
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
for (Node child : root.children){
int childHeight = height(child);
pq.offer(childHeight);
if (pq.size() > 2){
pq.poll();
}
}
if (pq.isEmpty()){
result = Math.max(result, 1);
return 1;
}else if (pq.size() == 1){
int one = pq.poll();
result = Math.max(result, one);
return one + 1;
}else{
int two = pq.poll();
int one = pq.poll();
result = Math.max(result, one + two);
return one + 1;
}
}
}
// TC: O(nlogn)
// SC: O(n)