LeetCode--590--easy--NaryTreePostorderTraversal

↘锁芯ラ 提交于 2019-12-09 21:30:10
package com.app.main.LeetCode.tree;

import com.app.main.LeetCode.prebase.Node;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/**
 * 590
 *
 * easy
 *
 * https://leetcode.com/problems/n-ary-tree-postorder-traversal/
 *
 Given an n-ary tree, return the postorder 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: [5,6,3,2,4,1]
 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: [2,6,14,11,7,3,12,8,4,13,9,10,5,1]


 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]


 * Created with IDEA
 * author:Dingsheng Huang
 * Date:2019/12/6
 * Time:下午6:27
 */
public class NaryTreePostorderTraversal {

    public List<Integer> postorder(Node root) {
        List<Integer> result = new ArrayList<>();
        postorderTraversal(root, result);
        return result;
    }

    private void postorderTraversal(Node curr, List<Integer> result) {
        if (curr != null) {
            if (curr.children != null) {
                for (int i = 0; i < curr.children.size(); i++) {
                    postorderTraversal(curr.children.get(i), result);
                }
            }
            result.add(curr.val);
        }
    }

    public List<Integer> postorder2(Node root) {
        List<Integer> result = new ArrayList<>();
        if (root == null) {
            return result;
        }
        Stack<Node> stack = new Stack<>();
        Stack<Node> stackhHelp = new Stack<>();
        Node curr = root;
        stack.add(curr);
        while (!stack.isEmpty()) {
            curr = stack.pop();
            stackhHelp.push(curr);
            for (int i = 0; i < curr.children.size(); i++) {
                stack.push(curr.children.get(i));
            }
        }
        while (!stackhHelp.isEmpty()) {
            result.add(stackhHelp.pop().val);
        }
        return result;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!