1、
for(auto c : root->children)
{
firstorder(c);
}
N叉树访问需要注意的是root->children有多个节点,children[0] [1]
所以我们需要遍历来一个个访问。
/*
// 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> res;
vector<int> preorder(Node* root) {
firstorder(root);
return res;
}
void firstorder(Node* root)
{
if(root==nullptr) return;
res.push_back(root->val);
for(auto c : root->children)
{
firstorder(c);
}
}
};
迭代的方法注意入栈的先后顺序
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int> res;
stack<Node*> sta;
if(root == nullptr) return res;
sta.push(root);
while(!sta.empty())
{
Node* tmp = sta.top();
sta.pop();
res.push_back(tmp->val);
int n=(tmp->children).size();
for(int i=n-1;i>=0;i--)
{
sta.push(tmp->children[i]);//423
//res.push_back(tmp->children[i]->val);
}
// for(auto c : tmp->children)
// {
// sta.push(c);
// res.push_back(c->val);
// }
}
return res;
}
};