589. N 叉树的前序遍历
给定一个 N 叉树,返回其节点值的 前序遍历 。
N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
进阶:
递归法很简单,你可以使用迭代法完成此题吗?
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:[1,3,5,6,2,4]
解法一:递归
public Listpreorder(Node root) { List res = new ArrayList (); npreorder(root,res); return res; } void npreorder(Node root,List res) { if(root == null) return ; res.add(root.val); for(Node node:root.children) { npreorder(node,res); } }
解法二:迭代
public Listpreorder(Node root) { List res = new ArrayList (); Deque stack = new ArrayDeque (); 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值在再一次迭代后