zoukankan      html  css  js  c++  java
  • 590. N-ary Tree Postorder Traversal

    Given an n-ary tree, return the postorder traversal of its nodes' values.

    For example, given a 3-ary tree:

    Return its postorder traversal as: [5,6,3,2,4,1].

    Note:

    Recursive solution is trivial, could you do it iteratively?

    M1: recursive

    time: O(n), space: O(height)

    /*
    // Definition for a Node.
    class Node {
        public int val;
        public List<Node> children;
    
        public Node() {}
    
        public Node(int _val,List<Node> _children) {
            val = _val;
            children = _children;
        }
    };
    */
    class Solution {
        public List<Integer> postorder(Node root) {
            List<Integer> res = new ArrayList<>();
            postorder(root, res);
            return res;
        }
        
        public void postorder(Node root, List<Integer> res) {
            if(root == null) {
                return;
            }
            
            for(int i = 0; i < root.children.size(); i++) {
                postorder(root.children.get(i), res);
            }
            res.add(root.val);
        }
    }

    M2: iterative

    time: O(n), space: O(n)  -- depending on the tree structure, worst case: the stack can keep up the whole tree nodes

    /*
    // Definition for a Node.
    class Node {
        public int val;
        public List<Node> children;
    
        public Node() {}
    
        public Node(int _val,List<Node> _children) {
            val = _val;
            children = _children;
        }
    };
    */
    class Solution {
        public List<Integer> postorder(Node root) {
            List<Integer> res = new ArrayList<>();
            if(root == null) {
                return res;
            }
            Stack<Node> s = new Stack<>();
            
            s.add(root);
            while(!s.isEmpty()) {
                Node tmp = s.pop();
                res.add(0, tmp.val);
                for(Node n : tmp.children) {
                    if(n != null) {
                        s.push(n);
                    }
                }
            }
            
            return res;
        }
    }

    二刷:

    class Solution {
        public List<Integer> postorder(Node root) {
            List<Integer> res = new ArrayList<>();
            if(root == null) {
                return res;
            }
            LinkedList<Node> stack = new LinkedList<>();
            stack.offerFirst(root);
            while(!stack.isEmpty()) {
                Node cur = stack.pollFirst();
                res.add(0, cur.val);
                for(int i = 0; i < cur.children.size(); i++) {
                    stack.offerFirst(cur.children.get(i));
                }
            }
            return res;
        }
    }
  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10201331.html
Copyright © 2011-2022 走看看