LeetCode 589. N-ary Tree Preorder Traversal

原题链接在这里: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 List<Node> children;
 6 
 7     public Node() {}
 8 
 9     public Node(int _val) {
10         val = _val;
11     }
12 
13     public Node(int _val, List<Node> _children) {
14         val = _val;
15         children = _children;
16     }
17 };
18 */
19 class Solution {
20     public List<Integer> preorder(Node root) {
21         List<Integer> res = new ArrayList<Integer>();
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<Integer> 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 List<Node> children;
 6 
 7     public Node() {}
 8 
 9     public Node(int _val) {
10         val = _val;
11     }
12 
13     public Node(int _val, List<Node> _children) {
14         val = _val;
15         children = _children;
16     }
17 };
18 */
19 class Solution {
20     public List<Integer> preorder(Node root) {
21         List<Integer> res = new ArrayList<>();
22         if(root == null){
23             return res;
24         }
25         
26         Stack<Node> stk = new Stack<>();
27         stk.push(root);
28         while(!stk.isEmpty()){
29             Node cur = stk.pop();
30             res.add(cur.val);
31             List<Node> 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 TraversalN-ary Tree Postorder Traversal.

posted @ 2019-11-27 10:22  Dylan_Java_NYC  阅读(361)  评论(0编辑  收藏  举报