Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/429.html
429. N-ary Tree Level Order Traversal (Easy)
Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example, given a 3-ary
tree:
We should return its level order traversal:
[ [1], [3,2,4], [5,6] ]
Note:
- The depth of the tree is at most
1000
. - The total number of nodes is at most
5000
.
Solution 1.
-
/* // Definition for a Node. class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, List<Node> _children) { val = _val; children = _children; } }; */ class Solution { public List<List<Integer>> levelOrder(Node root) { List<List<Integer>> levelOrder = new ArrayList<List<Integer>>(); if (root == null) return levelOrder; Queue<Node> queue = new LinkedList<Node>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); List<Integer> curLevel = new ArrayList<Integer>(); for (int i = 0; i < size; i++) { Node node = queue.poll(); curLevel.add(node.val); List<Node> children = node.children; if (children != null && children.size() > 0) { int childrenCount = children.size(); for (int j = 0; j < childrenCount; j++) queue.offer(children.get(j)); } } levelOrder.add(curLevel); } return levelOrder; } } ############ /* // Definition for a Node. class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, List<Node> _children) { val = _val; children = _children; } }; */ class Solution { public List<List<Integer>> levelOrder(Node root) { List<List<Integer>> ans = new ArrayList<>(); if (root == null) { return ans; } Deque<Node> q = new ArrayDeque<>(); q.offer(root); while (!q.isEmpty()) { List<Integer> t = new ArrayList<>(); for (int n = q.size(); n > 0; --n) { root = q.poll(); t.add(root.val); q.addAll(root.children); } ans.add(t); } return ans; } }
-
// OJ: https://leetcode.com/problems/n-ary-tree-level-order-traversal/ // Time: O(N) // Space: O(N) class Solution { public: vector<vector<int>> levelOrder(Node* root) { if (!root) return {}; vector<vector<int>> ans; queue<Node*> q{ {root} }; while (q.size()) { int cnt = q.size(); vector<int> level; while (cnt--) { auto node = q.front(); q.pop(); level.push_back(node->val); for (auto &child : node->children) q.push(child); } ans.push_back(level); } return ans; } };
-
""" # Definition for a Node. class Node: def __init__(self, val=None, children=None): self.val = val self.children = children """ class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: ans = [] if root is None: return ans q = deque([root]) while q: t = [] for _ in range(len(q)): root = q.popleft() t.append(root.val) q.extend(root.children) ans.append(t) return ans ############ """ # Definition for a Node. class Node(object): def __init__(self, val, children): self.val = val self.children = children """ class Solution(object): def levelOrder(self, root): """ :type root: Node :rtype: List[List[int]] """ if not root: return [] queue = [(root, 0)] res = [[]] while queue: node, level = queue.pop(0) if level >= len(res): res.append([]) res[level].append(node.val) for child in node.children: queue.append((child, level + 1)) return res
-
/** * Definition for a Node. * type Node struct { * Val int * Children []*Node * } */ func levelOrder(root *Node) [][]int { var ans [][]int if root == nil { return ans } q := []*Node{root} for len(q) > 0 { var t []int for n := len(q); n > 0; n-- { root = q[0] q = q[1:] t = append(t, root.Val) for _, child := range root.Children { q = append(q, child) } } ans = append(ans, t) } return ans }
-
/** * Definition for node. * class Node { * val: number * children: Node[] * constructor(val?: number) { * this.val = (val===undefined ? 0 : val) * this.children = [] * } * } */ function levelOrder(root: Node | null): number[][] { const res = []; if (root == null) { return res; } const queue = [root]; while (queue.length !== 0) { const n = queue.length; const vals = []; for (let i = 0; i < n; i++) { const { val, children } = queue.shift(); vals.push(val); queue.push(...children); } res.push(vals); } return res; }