思考:由于前序遍历的思路与深度优先搜索类似,所以前序遍历的迭代形式与深度优先搜索的迭代形式类似。
而深度优先的过程与出栈入栈的过程很类似,我们就可以利用栈来完成深度优先搜索的迭代
1.递归
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int> tree;
preorder(root,tree);
return tree;
}
void preorder(Node*root , vector<int> &tree){
if(root==NULL) return;
else{
tree.push_back(root->val);
}
for(int i = 0;i<root->children.size();i++){
preorder(root->children[i],tree);
}
return;
}
};
2.迭代
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int> tree;
stack<Node*> st;
if(root!=NULL) st.push(root);
while(st.empty()==false){
Node* temp = st.top();
st.pop();
tree.push_back(temp->val);
for(int i = temp->children.size()-1;i>=0;i--){
st.push(temp->children[i]);//从最右结点往最左结点插入
}
}
return tree;
}
};