题目描述:
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :
返回其前序遍历: [1,3,5,6,2,4]。
和二叉树的原理一样,这里用递归的方法:
C++代码如下:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int >v;
pt(root,v);
return v;
}
void pt(Node* root,vector<int>&res)
{
if(root==nullptr)
{
return;
}
res.push_back(root->val);
for(int i=0;i<root->children.size();i++)
{
pt(root->children[i],res);
}
}
};
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int >v;
pt(root,v);
return v;
}
void pt(Node* root,vector<int>&res)
{
if(root==nullptr){
return;
}
res.push_back(root->val);
for(Node* child:root->children){
pt(child,res);
}
}
};
JAVA代码如下:
/*
// 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> list=new ArrayList<Integer>();
Tra(root,list);
return list;
}
public void Tra(Node root,List<Integer> list){
if(root==null){
return;
}
list.add(root.val);
for(Node child:root.children){
Tra(child,list);
}
}
}
执行结果: