leetcode 590. N叉树的后序遍历

2019-04-17  本文已影响0人  topshi

题目描述

给定一个 N 叉树,返回其节点值的后序遍历
相关话题: 树    难度: 简单

例如,给定一个 3叉树 :

返回其后序遍历: [5,6,3,2,4,1].
说明: 递归法很简单,你可以使用迭代法完成此题吗?

    public List<Integer> postorder(Node root) {
        List<Integer> res = new ArrayList<Integer>();
        postorder(root, res);
        return res;
    }
    public void postorder(Node root, List<Integer> res){
        if(root == null) return;
        //遍历当前节点的children
        for(Node x : root.children){
            postorder(x, res); 
        }
        //遍历完children后,处理当前节点
         res.add(root.val);
    }
public List<Integer> postorder(Node root) {
        if(root == null) return new ArrayList<Integer>();
        List<Integer> res = new ArrayList<Integer>();
        //保存剩余未遍历子节点(左)
        Stack<List<Node>> stack1 = new Stack<>();
        //保存结果
        Stack<Node> stack2 = new Stack<>();
        List<Node> tmp = new ArrayList<Node>();
        tmp.add(root);
        stack1.push(tmp);
        while(!stack1.isEmpty()){
            List<Node> list = stack1.pop();
            Node x = list.remove(list.size()-1);
            stack2.push(x);
            if(!list.isEmpty()){
                stack1.push(list);
            }
            if(!x.children.isEmpty()){
                stack1.push(x.children);
            }
        }
        while(!stack2.isEmpty()){
            res.add(stack2.pop().val);
        }
        return res;
    }
上一篇下一篇

猜你喜欢

热点阅读