589. N叉树的前序遍历 #
Difficulty: 简单
给定一个 N 叉树,返回其节点值的_前序遍历_。
例如,给定一个 3叉树
:
返回其前序遍历: [1,3,5,6,2,4]
。
说明: 递归法很简单,你可以使用迭代法完成此题吗?
题解 #
解法一:递归求解 #
/*
// Definition for a Node.
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;
}
};
*/
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> result = new ArrayList<>();
helper(root, result);
return result;
}
private void helper(Node node, List<Integer> result) {
if (node == null) {
return;
}
result.add(node.val);
for (Node n : node.children) {
helper(n, result);
}
}
}
解法二:Stack 数据结构 #
/*
// Definition for a Node.
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;
}
};
*/
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> result = new ArrayList<>();
if (root == null) {
return result;
}
Stack<Node> stack = new Stack<Node>();
stack.add(root);
while(!stack.isEmpty()) {
Node n = stack.pop();
result.add(n.val);
Collections.reverse(n.children);
for (Node item : n.children) {
stack.add(item);
}
}
return result;
}
}
解法三:使用 Queue 模拟 Stack #
/*
// Definition for a Node.
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;
}
};
*/
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> result = new ArrayList<>();
if (root == null) {
return result;
}
Deque<Node> stack = new LinkedList<Node>();
stack.add(root);
while(!stack.isEmpty()) {
Node n = stack.pollLast();
result.add(n.val);
Collections.reverse(n.children);
for (Node item : n.children) {
stack.add(item);
}
}
return result;
}
}