首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
牛客734077141号
浙江大学 算法工程师
发布于浙江
关注
已关注
取消关注
@mtgo666:
二叉树的三种遍历(非递归)
1、简介我们在递归的时候说到过,一般我们如果想把递归的算法转换至非递归的实现,我们可以自己利用辅助栈来代替系统栈保存一些信息。所以在实现二叉树的三种非递归遍历的时候,我们需要开辟一个辅助栈来保存一些信息。2、二叉树结点结构/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/3、先序遍历2.1 实现思路我们只需要开辟一个栈,先让根节点入栈。只要栈不空,我们循环的访问栈内每一位结点,如果访问的当前结点有孩子,让结点的右孩子左孩子依次入栈即可。(因为栈是先进后出,先序遍历是根左右,所以我们入栈的时候是先让右孩子入栈)。3.2 代码实现class Solution {public: void preorderTraversal(TreeNode* root) { stack<TreeNode*> s; s.push(root); while(!s.empty()){ TreeNode *temp = s.top(); s.pop(); if(!temp) continue; cout<<temp->val<<" "; if(temp->right) s.push(temp->right); if(temp->left) s.push(temp->left); } }};4、中序遍历4.1 实现思路中序遍历的顺序是左根右,所以我们要先要访问到最左的那个结点(while(t){t= t->left})。在访问最左结点的过程中将路径上的结点入栈。然后当栈不为空的时候循环访问即可。比如说最左的结点是1号结点,其父节点是2号结点。那么在找1号结点的过程中2号结点必定已入栈并且在1号结点下面。所以访问完1号结点后,接着会访问2号结点,只需在访问完2号结点时,将当前指针指向其右子树就会去访问其右子树。总体下来的顺序就是左根右。4.2 代码实现class Solution {public: void inorderTraversal(TreeNode* root) { stack<TreeNode*> s; TreeNode *t = root; while(!s.empty() || t){ while(t){ //找到最左的那个结点 s.push(t); t = t -> left; } if(!s.empty()){ TreeNode *temp = s.top(); s.pop(); cout<<temp->val<<" "; t = temp->right; } } }};5、后序遍历5.1 实现思路后序遍历的非递归实现相较于先序和中序有点复杂。因为我们需要记录下结点的状态,后序遍历的顺序是左右根,我们在访问完左孩子去访问右孩子的时候,要经过根节点,所以我们要记录一下根结点的状态,如果这个根节点访问过了才输出。5.2 代码实现由于要记录每个结点的状态,我们有两种可以实现的方式:第一种是在二叉树结点的结构体内加一个标志位;第二种是我们采用对组的形式,每个结点绑定一个bool值。在这里我们使用对组的方式实现。class Solution {public: void postorderTraversal(TreeNode* root) { stack<pair<TreeNode*, bool> > s; s.push(make_pair(root, false)); //根节点入栈 bool visited; while(!s.empty()){ pair<TreeNode*, bool> p = s.top(); s.pop(); visited = p.second; if(!p.first){ continue; } if(visited){ //如果该节点被访问过才输出 cout<<p.first->val<<" "; } else { s.push(make_pair(p.first, true)); if(p.first->right) s.push(make_pair(p.first->right, false)); if(p.first->left) s.push(make_pair(p.first->left, false)); } } }};
点赞 0
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-19 16:45
已编辑
门头沟学院 后端工程师
27懂车帝日常
📍面试公司:懂车帝🕐面试时间:2025💻面试岗位:后端开发❓面试问题:一面:先做两道算法,接雨水和反转链表1.redis的hash怎么实现2.MySQL索引的作用3.B+树4.高并发MySQL做数据存储,读写性能瓶颈优化思路5.布隆过滤器6.缓存击穿7.反问二面:依旧先做算法: n个骰子,点数和为k的概率1.TCP拥塞控制2.4次挥手3.内存置换算法4.LFU设计5.文件描述符6.堆排序和快速排序,解释时间和空间复杂度7.反问hr面:1.问实习2.问和同组实习生相比优缺点3.实习时间以及入职时间4.反问🙌面试感想:oc,爽!
查看17道真题和解析
点赞
评论
收藏
分享
10-15 20:01
已编辑
上海大学 Java
钉钉什么垃圾公司,约了面试鸽人
钉钉什么垃圾公司,约面鸽人
Syca_:
途虎养车给我定了我这边早上六点的笔试,睡了四个小时起来难受的要命,告诉我面试时间是两天后的凌晨四点
点赞
评论
收藏
分享
08-30 20:33
已编辑
杭州电子科技大学 Java
好消息,虾皮不卡双非,坏消息凌晨面试?
不是哥们😨,这个不写上下午,直接2:00-3:00========当即找hr改成下午的时间了=====8.30 下午八点约二面
一只末影酱:
破案了,真是早上2点
点赞
评论
收藏
分享
10-16 16:10
门头沟学院 财务
字节商分二面
1.你在得物实习时,选择以商家分层作为后续分析和运营策略制定的核心指标而非其他客户标签,原因是什么? 2.在商家分层体系中,是以哪些具体指标对客户进行分层的? 3.在制定商家分层逻辑的阶段,你是否参与到分层规则的制定中?还是仅根据已有的分层规则进行商家标签打标? 4.你提到会针对不同层级商家的特点给到针对性运营支持,能否举例说明具体有哪些运营支持,以及背后的原因是什么? 5.从你的视角来看,当时所采用的商家分层指标体系建立及识别逻辑标准,存在哪些问题?是否有可优化的点? 6.你对“经营分析”这个岗位有怎样的了解?你认为自己做商分岗,在这个岗位上有哪些优势?
查看6道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
这个实习生我要给他转正
1.3W
2
...
「潜力作者交流2群」开放报名啦!
1.1W
3
...
27四非本,字节后端实习OC
5224
4
...
以Mentor视角,说说我最喜欢什么样的实习生
4516
5
...
双非鼠鼠的秋招精神状态
4116
6
...
没有家庭的托举,我只能靠自己
3479
7
...
学长,我得休息了,明天要面软*动力
3451
8
...
如何做好汇报:让努力被看见、让成果更有价值
3369
9
...
制造业求职 0 offer 时期的破局之道
2948
10
...
10.19百度笔试
2779
创作者周榜
更多
正在热议
更多
#
你的mentor是什么样的人?
#
5253次浏览
41人参与
#
26届秋招公司红黑榜
#
15342次浏览
52人参与
#
平安产险科技校招
#
2468次浏览
0人参与
#
怎么给家人解释你的工作?
#
2471次浏览
28人参与
#
你觉得mentor喜欢什么样的实习生
#
11576次浏览
313人参与
#
帮我看看,领导说这话什么意思?
#
7753次浏览
34人参与
#
未岚大陆求职进展汇总
#
38332次浏览
114人参与
#
你觉得多少薪资算SSP?
#
112815次浏览
415人参与
#
实习必须要去大厂吗?
#
147349次浏览
1546人参与
#
求职低谷期你是怎么度过的
#
6052次浏览
112人参与
#
度小满求职进展汇总
#
10508次浏览
54人参与
#
没有家庭托举的我是怎么找工作的
#
13835次浏览
171人参与
#
同bg的你秋招战况如何?
#
158968次浏览
927人参与
#
从哪些方向判断这个offer值不值得去?
#
7402次浏览
99人参与
#
校招泡的最久的公司是哪家?
#
5556次浏览
26人参与
#
你觉得面试是靠实力还是靠运气
#
23451次浏览
278人参与
#
面试紧张时你会有什么表现?
#
1974次浏览
21人参与
#
应届生应该先就业还是先择业
#
142763次浏览
733人参与
#
牛客树洞,我想对你说
#
1638次浏览
34人参与
#
职场新人体验
#
98845次浏览
655人参与
#
你喜欢工作还是上学
#
77717次浏览
860人参与
#
简历无回复,你会继续海投还是优化再投?
#
103682次浏览
819人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务