目录
8. LeetCode429. N 叉树的层序遍历
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>>res;
if(root==NULL)return res;
queue<Node*>qu;
qu.push(root);
while(!qu.empty()){
vector<int>vec;
for(int i=qu.size();i>0;i--){
Node*node=qu.front();
qu.pop();
vec.push_back(node->val);
for(int j=0;j<node->children.size();j++){
qu.push(node->children[j]);
}
}
res.push_back(vec);
}
return res;
}
};
15. LeetCode589. N 叉树的前序遍历
和二叉树的前序遍历类似,都是先处理当前节点,再按序处理子节点
递归:
class Solution {
public:
vector<int>res;
void helper(Node*node){
if(node==NULL)return;
res.push_back(node->val);
for(int i=0;i<node->children.size();i++){
helper(node->children[i]);
}
}
vector<int> preorder(Node* root) {
helper(root);
return res;
}
};
迭代:
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int>res;
if(root==NULL)return res;
stack<Node*>stk;
stk.push(root);
while(!stk.empty()){
Node*node=stk.top();
stk.pop();
res.push_back(node->val);
for(int i=node->children.size()-1;i>=0;i--){
stk.push(node->children[i]);
}
}
return res;
}
};
16. LeetCode590. N 叉树的后序遍历
class Solution {
public:
vector<int>res;
void helper(Node*node){
if(node==NULL){
return;
}
for(int i=0;i<node->children.size();i++){
helper(node->children[i]);
}
res.push_back(node->val);
}
vector<int> postorder(Node* root) {
helper(root);
return res;
}
};
迭代:
和二叉树后序遍历相似,在前序遍历的基础上,改变子节点入栈顺序,最后反转数组。
class Solution {
public:
vector<int> postorder(Node* root) {
vector<int>res;
if(root==NULL)return res;
stack<Node*>stk;
stk.push(root);
while(!stk.empty()){
Node*node=stk.top();
stk.pop();
res.push_back(node->val);
for(int i=0;i<node->children.size();i++){
stk.push(node->children[i]);
}
}
reverse(res.begin(),res.end());
return res;
}
};