LeetCode 589. N叉树的前序遍历(前序遍历的迭代实现)
思考:由于前序遍历的思路与深度优先搜索类似,所以前序遍历的迭代形式与深度优先搜索的迭代形式类似。
而深度优先的过程与出栈入栈的过程很类似,我们就可以利用栈来完成深度优先搜索的迭代
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;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?