zoukankan      html  css  js  c++  java
  • 590. N 叉树的后序遍历

    给定一个 N 叉树,返回其节点值的 后序遍历 。

    N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。

    进阶:

    递归法很简单,你可以使用迭代法完成此题吗?

    示例 1:

    输入:root = [1,null,3,2,4,null,5,6]
    输出:[5,6,3,2,4,1]

    解法一:递归解法   理解递归解法

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

        void postorder(Node root,List<Integer> res) {
             if(root==null)
                 return ;
            for(Node node:root.children) {
                postorder(node,res);
            }
            res.add(root.val);
          
         }

    解法二:迭代求解

    public List<Integer> postorder(Node root) {
            LinkedList<Integer> res = new LinkedList<>();
            if(root == null)
                return res;
            Deque<Node> stack = new ArrayDeque<>();
            stack.addLast(root);
            while(!stack.isEmpty()) {
                Node node = stack.removeLast();
                res.addFirst(node.val);
                for(int i=0;i<node.children.size();i++) {
                    stack.addLast(node.children.get(i));
                }
            }
            return res;
        }

    解法三:很秀的一种解法

    更为简洁的写法。这种解法的思想是先序遍历的变形,先序遍历是“根->左->右”,后序遍历是“左->右->根”,那么把先序遍历改成“根->右->左”,再逆序一下就是后序遍历。

    既然递归转迭代是必然的,那么每次我们转换的时候,该怎么转,依然是一大难题

     

  • 相关阅读:
    2019-2020-1 20175315 20175322 20175334 实验五 通讯协议设计
    bfs思路总结
    蓝桥杯-带分数
    Passive WiFi Tracking
    openWRT刷机设置
    研究生若干事
    Dijkstra算法和Floyed算法
    最小生成树prim算法
    无穷大量0x3f3f3f3f
    杭电OJ题目分类
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/14863560.html
Copyright © 2011-2022 走看看