二叉树的前序,中序遍历
前序递归于循环
#include <iostream> #include <stack> using namespace std; struct TreeNode { int val; TreeNode *left,*right; }; void create(TreeNode *&p) { int k; cin>>k; //1 2 0 0 3 0 0; if(k!=0) { p=new TreeNode; p->val=k; create(p->left); create(p->right); } else p=NULL; } void preorder1(TreeNode *p) { if(p) { cout<<p->val; preorder1(p->left); preorder1(p->right); } } void preorder2(TreeNode *root) { stack<TreeNode*> s; TreeNode *p=root; while(p||!s.empty()) { if(p) { s.push(p); cout<<p->val; p=p->left; } else { p=s.top(); s.pop(); p=p->right; } } }
中序递归与循环
void inorder1(TreeNode *p) { if(p) { inorder1(p->left); cout<<p->val; inorder1(p->right); } } void inorder2(TreeNode *p) { stack<TreeNode*> s; while(p||!s.empty()) { if(p) { s.push(p); p=p->left; } else { p=s.top(); cout<<p->val; s.pop(); p=p->right; } } } int main() { TreeNode *root=new TreeNode; create(root); //preorder1(root); preorder2(root); //inorder1(root); inorder2(root); return 0; }
层次优先遍历
void levelorder(TreeNode *root) { deque<TreeNode*> d; TreeNode *p=root; d.push_back(p); while(!d.empty()) { p=d.front(); cout<<p->val; d.pop_front(); if(p->left) d.push_back(p->left); if(p->right) d.push_back(p->right); } }
深度优先遍历
void depthorder(TreeNode *root) { stack<TreeNode*> s; TreeNode *p=root; s.push(p); while(!s.empty()) { p=s.top(); cout<<p->val; s.pop(); if(p->right) s.push(p->right); if(p->left) s.push(p->left); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端