首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
今天 19:46
杭州电子科技大学 大数据开发工程师
吐血整理!春招面了15家,总结出面试官最爱问的AI问题
1. "你平时用ChatGPT/AI工具吗?用来干什么?"翻车案例(我):第一次被问到直接说:"用啊,写代码调bug特别快。"面试官追问:"那你觉得这样对你学习有帮助吗?"我当时就懵了,不知道该说帮助大还是帮助小...后来学聪明的回答:"会用,主要用在这几个场景:快速了解新技术的概念框架review代码找潜在问题写一些重复性的测试用例不过核心逻辑我还是自己写,AI给的代码我会逐行看懂再用"面试官明显满意多了。2. "你怎么看待AI对程序员的影响?"这题真的是送命题,说AI没用显得你out,说AI...
面试官最爱问的 AI 问...
点赞
评论
收藏
分享
03-15 10:35
吉林农业大学 算法工程师
快手 AI Agent开发 二面
1 . RAG 怎么评测,有哪些维度,那些指标RAG 的评测一般分成检索、生成、端到端三层。检索层主要看正确证据有没有被找回来,常用 Recall@K、HitRate@K、MRR、NDCG;生成层主要看答案对不对、是不是基于证据回答,常看 Answer Correctness、Faithfulness、Relevance、Completeness、Citation Accuracy;端到端层更偏业务效果,比如用户满意度、追问率、拒答率、时延和成本。真正做项目时不会只看最终答案,因为答案错可能是召回错、重排错、上下文拼接错,也可能是模型生成错。2. 数据集包括什么RAG 的数据集一般不只是知识库...
AI-Agent面试实战...
点赞
评论
收藏
分享
03-17 19:19
已编辑
西安交通大学 Java
腾讯录用评估一周了还没消息😭
有人懂这个录用评估会挂吗?听说发帖有玄学能接offer…——————3月17日二编真的有玄学!今天下午拿到offer了😭😭😭,成为鹅孝子了
许愿给我个offer:
接offer,uu什么岗位啊
点赞
评论
收藏
分享
03-01 00:32
西北工业大学 Java
简历求拷打~
拷打简历,第二版简历了, Hot100正在刷第2遍,八股还在背,感觉很不熟,大家八股有什么快速提升的方法吗,
tongx_:
海投吧同学,面试中能学到更多东西呢,比如拷打项目,要是觉得没准备好就可以从中厂开始呢,但是腾讯都是无限复活
点赞
评论
收藏
分享
03-20 12:11
蚌埠坦克学院 Java
暑期第一面-快手27留用实习
闲聊幂等相关问题多线程相关问题。Java中的HashMap、ConcurrentHashMap实现原理为什么MySQL使用B+树?慢SQL如何优化?介绍实习中的ES的同步是怎么做的手撕:LRU缓存 输出没搞好,给面试官说了下思路就OK了。 过年玩的太嗨了,面试的状态还不是很好,很多地方思路很乱,面试官感觉也对我的实习不太感兴趣,没聊几句就手撕了。
查看5道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
我们为什么要做网申助手这个插件
9584
2
...
找实习两个月,工具用了一堆,最后只留下这些
4994
3
...
速收藏!各公司最新招聘进展!
3974
4
...
面试官视角聊聊:如何通过AI coding面试?附焚决
2955
5
...
腾讯前端一面,没想到问这些
2462
6
...
小红书暑期一面
1993
7
...
字节暑期实习OC
1721
8
...
携程暑期一面凉经
1418
9
...
2027届bilibili前端开发实习生
1315
10
...
字节后端二面,比一面难多了
1214
创作者周榜
更多
正在热议
更多
#
跟HR说什么能被秒回?
#
14039次浏览
247人参与
#
军工所铁饭碗 vs 互联网高薪资,你会选谁
#
5963次浏览
28人参与
#
巨人网络春招
#
10831次浏览
164人参与
#
你收到了哪些公司的笔试?
#
27836次浏览
170人参与
#
腾讯音乐求职进展汇总
#
159733次浏览
1100人参与
#
春招/暑实第一面是哪家?
#
28437次浏览
302人参与
#
MiniMax求职进展汇总
#
20678次浏览
270人参与
#
当下环境,你会继续卷互联网,还是看其他行业机会
#
185475次浏览
1100人参与
#
小红书求职进展汇总
#
226070次浏览
1351人参与
#
硬件人秋招的第一个offer
#
122213次浏览
1453人参与
#
实习到现在,你最困惑的一个问题
#
31078次浏览
271人参与
#
如果重来一次你还会读研吗
#
228833次浏览
2009人参与
#
网易游戏笔试
#
5981次浏览
83人参与
#
职能管理面试记录
#
10314次浏览
57人参与
#
把自己当AI,现在最消耗你token的问题是什么?
#
5785次浏览
146人参与
#
正在春招的你,也参与了去年秋招吗?
#
361475次浏览
2628人参与
#
硬件应届生薪资是否普遍偏低?
#
108076次浏览
601人参与
#
简历中的项目经历要怎么写?
#
308168次浏览
4081人参与
#
工作中遇到的歹人
#
96233次浏览
535人参与
#
我的AI电子员工
#
34016次浏览
223人参与
#
校招笔试
#
460134次浏览
2940人参与
#
AI时代,哪些岗位最容易被淘汰
#
60421次浏览
625人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务