给定一个 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; }
既然递归转迭代是必然的,那么每次我们转换的时候,该怎么转,依然是一大难题