589_N叉树的前序遍历
package 二叉树.BT; import java.util.ArrayList; import java.util.Collections; import java.util.Deque; import java.util.LinkedList; import java.util.List; /** * https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/ * @author Huangyujun * */ public class _589_N叉树的前序遍历 { public class Node { public int val; public List<Node> children; public Node() { } public Node(int _val) { val = _val; } public Node(int _val, List<Node> _children) { val = _val; children = _children; } } //递归实现 List<Integer> list1 = new ArrayList<Integer>(); public List<Integer> preorder1(Node root) { if(root == null) return list1; //先拿到当前结点 list1.add(root.val); for(Node node: root.children) { preorder1(node); } return list1; } //要求迭代实现 //利用到了栈的特点跟集合倒序(拿到最后一层的孩子树结点) public List<Integer> preorder(Node root) { LinkedList<Integer> output = new LinkedList<>(); if (root == null) { return output; } LinkedList<Node> stack = new LinkedList<>(); stack.add(root); while (!stack.isEmpty()) { Node node = stack.pop(); output.add(node.val); //前序(假设是二叉树时:左边先(左左左到最后一个孩子(所以逆序一下孩子的顺序啊))) Collections.reverse(node.children); for (Node item : node.children) { stack.push(item); } } return output; } }