本文主要是介绍589. N 叉树的前序遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
589. N 叉树的前序遍历
java1:stack栈:没看懂
class Solution {public List<Integer> preorder(Node root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Map<Node, Integer> map = new HashMap<Node, Integer>();Deque<Node> stack = new ArrayDeque<Node>();Node node = root;while (!stack.isEmpty() || node != null) {while (node != null) {res.add(node.val); // 添加入resstack.addFirst(node);List<Node> children = node.children;if (children != null && children.size() > 0) {map.put(node, 0);node = children.get(0); // 一直往左侧延伸,所以一直get(0)} else {node = null;}}node = stack.peekFirst();int index = map.getOrDefault(node, -1) + 1; // 当前节点map-get一次,遍历一个分支!List<Node> children = node.children; // 延伸到最左下边,然后check右侧的节点if (children != null && children.size() > index) { // node移至右侧一个节点,然后再循环往左下延伸!map.put(node, index);node = children.get(index);} else { // 子节点不存在 || children使用结束,那么当前node就应该删除、并且node==null,不进入下一个while,进入右侧下一个节点stack.removeFirst();map.remove(node);node = null; // 不进入下一次while}}return res;}
}
java2:DFS
class Solution {List<Integer> list = new ArrayList<>();private void dfs(Node root) {if (root == null) {return;}list.add(root.val);for (Node child : root.children) {dfs(child);}}public List<Integer> preorder(Node root) {dfs(root);return list;}
}
这篇关于589. N 叉树的前序遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!