589. N 叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com)
递归:
class Solution {
vector<int>res;
public:
vector<int> preorder(Node* root) {
if(root==nullptr) return res;
fun(root);
return res;
}
void fun(Node*root){
if(root==nullptr) return;
res.push_back(root->val);
for(int i=0;i<root->children.size();i++){
fun(root->children[i]);
}
}
};
非递归:
思想:用了栈,入栈顺序有点特别:节点的孩子从右向左入栈,这样出栈顺序为从左到右。
haha,想了好久,本来想着用队列,子节点入队列,遍历一个子节点替换成孩子节点,但是队列不允许。机智的我想到了用栈反着装子节点。
class Solution {
vector<int>res;
public:
vector<int> preorder(Node* root) {
if(root==nullptr) return res;
fun(root);
return res;
}
void fun(Node*root){
stack<Node*> s;
s.push(root);
while(s.size()!=0){
root=s.top();
res.push_back(root->val);
s.pop();
for(int i=root->children.size()-1;i>=0;i--){
s.push(root->children[i]);
}
}
}
};