1.N叉树的前序遍历
//给定一个 N 叉树,返回其节点值的前序遍历。 // // 例如,给定一个 3叉树 : // // 返回其前序遍历: [1,3,5,6,2,4]。 // // 说明: 递归法很简单,你可以使用迭代法完成此题吗? //Related Topics 树
递归法
class Solution {
List<Integer> list = new ArrayList<>();
public List<Integer> preorder(Node root) {
inOrder(root);
return list;
}
public void inOrder(Node node){
if(node == null){
return;
}
list.add(node.val);
for (Node item : node.children) {
inOrder(item);
}
}
}
迭代法
这个直接看官方题解:
public List<Integer> preorder(Node root) {
//这个属于摘葡萄不是投影
LinkedList<Node> stack = new LinkedList<>();
List<Integer> output = new ArrayList<>();
if(root == null){
return output;
}
stack.push(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;
}
2.N叉树的后序遍历
//给定一个 N 叉树,返回其节点值的后序遍历。 // // 例如,给定一个 3叉树 : // // // // // // // // 返回其后序遍历: [5,6,3,2,4,1]. // // // // 说明: 递归法很简单,你可以使用迭代法完成此题吗? Related Topics 树
递归法
class Solution {
//List<Integer> list = new ArrayList<>();
public List<Integer> postorder(Node root) {
outOrder(root);
return list;
}
public void outOrder(Node node){
if(node == null){
return;
}
for (Node item : node.children) {
outOrder(item);
}
list.add(node.val);
}
}
迭代法
题解:
官方误人,看第二条评论
public List<Integer> postorder(Node root) {
List<Integer> list = new ArrayList<>();
LinkedList<Node> stack = new LinkedList<>();
if (root == null) return list;
stack.add(root);
while(!stack.isEmpty()) {
Node temp = stack.pop();
list.add(temp.val);
for(Node child : temp.children){
stack.push(child);
}
}
Collections.reverse(list);
return list;
}