给定一个N叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树
:
返回其前序遍历: [1,3,5,6,2,4]
。
说明: 递归法很简单,你可以使用迭代法完成此题吗?
思路:
解法一:采用递归的思想遍历n叉树。
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> res=new LinkedList<Integer>();
if(null==root){
return res;
}
preOrderTarversal(res,root);
return res;
}
/**
* 前序遍历n叉树
* @param res
* @param node
*/
public void preOrderTarversal(List<Integer> res,Node node){
if(null==node){
return ;
}
res.add(node.val);
if(null!=node.children&&node.children.size()>0)
preOrderTarversal(res,node.children.get(0));
for(int i=1;i<node.children.size();i++){
preOrderTarversal(res,node.children.get(i));
}
}
}
解法二:采用非递归的思想遍历n叉树,使用辅助数据结构Stack。
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> res=new LinkedList<Integer>();
if(null==root){
return res;
}
ArrayDeque<Node> stack=new ArrayDeque<Node>();
stack.push(root);
while(!stack.isEmpty()){
Node node=stack.pop();
res.add(node.val);
if(null!=node.children&&node.children.size()>0){
for(int i=node.children.size()-1;i>=0;i--){
stack.push(node.children.get(i));
}
}
}
return res;
}
}