原题链接在这里:https://leetcode.com/problems/n-ary-tree-preorder-traversal/
题目:
Given an n-ary tree, return the preorder traversal of its nodes' values.
Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples).
Follow up:
Recursive solution is trivial, could you do it iteratively?
Example 1:
Input: root = [1,null,3,2,4,null,5,6] Output: [1,3,5,6,2,4]
Example 2:
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: [1,2,3,6,7,11,14,4,8,12,5,9,13,10]
Constraints:
- The height of the n-ary tree is less than or equal to
1000
- The total number of nodes is between
[0, 10^4]
题解:
Recursion is obvious.
Time Compelxity: O(V+E).
Space: O(V). stack space.
AC Java:
1 /* 2 // Definition for a Node. 3 class Node { 4 public int val; 5 public Listchildren; 6 7 public Node() {} 8 9 public Node(int _val) { 10 val = _val; 11 } 12 13 public Node(int _val, List_children) { 14 val = _val; 15 children = _children; 16 } 17 }; 18 */ 19 class Solution { 20 public Listpreorder(Node root) { 21 List res = new ArrayList (); 22 if(root == null){ 23 return res; 24 } 25 26 dfs(root, res); 27 return res; 28 } 29 30 private void dfs(Node root, List res){ 31 if(root == null){ 32 return; 33 } 34 35 res.add(root.val); 36 for(Node child : root.children){ 37 dfs(child, res); 38 } 39 } 40 }
Iteration method, add root into stack.
When popping up top node, for all its children, iterate from right to left. Add each of them to stack.
Time Complexity: O(V+E).
Space: O(V).
AC Java:
1 /* 2 // Definition for a Node. 3 class Node { 4 public int val; 5 public Listchildren; 6 7 public Node() {} 8 9 public Node(int _val) { 10 val = _val; 11 } 12 13 public Node(int _val, List_children) { 14 val = _val; 15 children = _children; 16 } 17 }; 18 */ 19 class Solution { 20 public Listpreorder(Node root) { 21 List res = new ArrayList<>(); 22 if(root == null){ 23 return res; 24 } 25 26 Stack stk = new Stack<>(); 27 stk.push(root); 28 while(!stk.isEmpty()){ 29 Node cur = stk.pop(); 30 res.add(cur.val); 31 List nexts = cur.children; 32 if(nexts != null){ 33 for(int i = nexts.size()-1; i>=0; i--){ 34 stk.push(nexts.get(i)); 35 } 36 } 37 } 38 39 return res; 40 } 41 }
类似Binary Tree Preorder Traversal, N-ary Tree Postorder Traversal.