zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    左划删除
    UILabel 添加图片
    Swift-11-委托模式
    Swift-11-协议(Protocols)
    Swift-10--错误处理
    Swift-09-可空链式调用(Optional Chaining)
    Swift-08-闭包引起的循环强引用
    Swift-07-析构器deinit
    Swift-06-闭包
    【转】HTML5标签使用的常见误区
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11940231.html
Copyright © 2011-2022 走看看