Leetcode 589. N-ary Tree Preorder Traversal
题目链接: N-ary Tree Preorder Traversal
难度:Easy
题目大意:
N叉树的前序遍历。
思路:
思路1(递归):
利用递归,如果根节点非空,记录根节点,然后对根节点的子节点进行递归。
思路2(迭代):
利用迭代,如果根节点非空,将根节点入栈,弹出根节点进行处理,然后将根节点的所有子节点入栈,重复上述操作,直到栈空为止。
代码
思路1代码
/*
// 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 {
List<Integer> res=new ArrayList<>();
public List<Integer> preorder(Node root) {
if(root!=null){
res.add(root.val);
for(int i=0;i<root.children.size();i++){
preorder(root.children.get(i));
}
}
return res;
}
}
思路2代码
/*
// 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> res=new ArrayList<>();
if(root==null){
return res;
}
Stack<Node> stack=new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
Node node=stack.pop();
res.add(node.val);
for(int i=node.children.size()-1;i>=0;i--){
stack.push(node.children.get(i));
}
}
return res;
}
}