589. N 叉树的前序遍历

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

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

进阶:

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

示例 1:

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

解法一:递归

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

解法二:迭代

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

 从递归到迭代并不容易

解决几个痛点:怎么存储现有的参数root-----使用了栈,迭代怎么保证存储现有的值------for 存储所有节点,同时使得再一次循环时能够使用值-------更新了root值在再一次迭代后

posted @ 2021-06-08 18:08  zhustarstar  阅读(42)  评论(0编辑  收藏  举报