首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
牛客1610600号
2017-10-17 12:42
已编辑
北京航空航天大学 算法工程师
关注
已关注
取消关注
面完快手,一道问题求指教
我跪的那道算法题,我跪不瞑目
剑指offer里的:
按之字形顺序打印二叉树
因为原来没刷过这道题,经过思考后,觉得用一个队列和一个栈可以完成
虽然我的答案不对,但是面试官说可以用一个队列就能完成,用空指针判断每行是不是结束。。。。
我到现在还是不明白面试官的想法。。。。。大佬们请指教
提示
全部评论
推荐
最新
楼层
牛客2845888号
北京航空航天大学 算法工程师
写了一个程序,求大神看看 # -*- coding: UTF-8 -*-. class Node(object): """节点类""" def __init__(self, data = -1, lchild = None, rchild = None, isEmpty = 0): self.data = data self.lchild = lchild self.rchild = rchild self.isEmpty = isEmpty class BinaryTree(object): """树类""" def __init__(self): self.root = Node(isEmpty = 1) def add(self, data): """为树增加节点,建立二叉查找树""" node = Node(data) if self.root.isEmpty == 1: self.root = node else: treeNode = self.root while(1): if node.data <= treeNode.data: if treeNode.lchild == None: treeNode.lchild = node break else: treeNode = treeNode.lchild else: if treeNode.rchild == None: treeNode.rchild = node break else: treeNode = treeNode.rchild def printTree(self): """按之字形顺序打印二叉树""" if self.root == None: return myList = [] myList.append(self.root) flagForward = 0# 为0表示下一行逆序打印,为1表示下一行正序打印 numberNow = 1 numberNext = 0 while(1): # 表示在该行查找 if numberNow: # 总是将先放入的先打印出来 node = myList.pop(0) numberNow -= 1 print node.data, # 根据flagForward的值改变左右子树的打印数学 if flagForward: if node.rchild: myList.insert(numberNow, node.rchild) numberNext += 1 if node.lchild: myList.insert(numberNow, node.lchild) numberNext += 1 else: if node.lchild: myList.insert(numberNow, node.lchild) numberNext += 1 if node.rchild: myList.insert(numberNow, node.rchild) numberNext += 1 # 表示该行结束了 else: # 下一行变成该行 if numberNext: numberNow = numberNext numberNext = 0 # 正方向逆序 flagForward = ~flagForward # 表示树结束了 else: break def test(): 'Test the program.' arr = [5, 6, 1, 4, 2, 69, -1, 24] tree = BinaryTree() for item in arr: tree.add(item) # 5 # 1 6 # -1 5 69 # 2 24 print '按之字形顺序打印二叉树:' tree.printTree() if __name__ == "__main__": test()
点赞
回复
分享
发布于 2017-10-29 21:09
你们都有offer,只有我没有offer
某山村小学 Java
肯定是你没有 吃灯泡,吃辣椒那种绝技,
点赞
回复
分享
发布于 2017-09-25 18:12
zohar727
湖南科技大学 前端工程师
是不是要会双击666
点赞
回复
分享
发布于 2017-09-25 18:08
牛客269
字节跳动_字节跳动技术专家
public static void snakePrint(BinaryTreeNode root) { if(root == null) { return; } ArrayDeque<BinaryTreeNode> arrayDeque = new ArrayDeque(); arrayDeque.add(root); boolean flag = true; while(!arrayDeque.isEmpty()) { int size = arrayDeque.size(); if(flag) { for(int i=0;i<size;i++) { System.out.print(arrayDeque.peekFirst().value+" "); BinaryTreeNode tmp = arrayDeque.pollFirst(); if(tmp.left != null) { arrayDeque.addLast(tmp.left); } if(tmp.right != null) { arrayDeque.addLast(tmp.right); } } flag = flag ? false : true; } else { for(int i=0;i<size;i++) { System.out.print(arrayDeque.peekLast().value+" "); BinaryTreeNode tmp = arrayDeque.pollLast(); if(tmp.left != null) { arrayDeque.addLast(tmp.left); } if(tmp.right != null) { arrayDeque.addLast(tmp.right); } } flag = flag ? false : true; } } }
点赞
回复
分享
发布于 2018-06-03 15:05
牛客269
字节跳动_字节跳动技术专家
用一个双端队列,即可解决,设一个标记位,记录上一层的遍历顺序,下一层遍历的时候相反方向遍历即可,同时修改标记位。
点赞
回复
分享
发布于 2018-06-03 15:04
Jeff.D
Владимирский юридический институт 算法工程师
#include<cstdio> #include<cstdlib> #include<cmath> #include<ctime> #include<cstring> #include<cassert> #include<climits> #include<iostream> #include<sstream> #include<vector> #include<set> #include<map> #include<stack> #include<queue> #include<bitset> #include<algorithm> #include<iterator> #include<string> #include<tuple> #include<random> #include <chrono> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; void zigzag(TreeNode* root) { vector<TreeNode*> pts; if (NULL == root) return; queue<TreeNode*> q; q.push(root); int num1 = 1, num2 = 0; TreeNode* cur = NULL; while (!q.empty()) { cur = q.front(); q.pop(); if (cur->left != NULL) { q.push(cur->left); num2++; } if (cur->right != NULL) { q.push(cur->right); num2++; } pts.push_back(cur); num1--; if (0 == num1) { pts.push_back(NULL); num1 = num2; num2 = 0; } } int n = pts.size(); int rev = 0; int i, j; i = -1; int mid, sum; while (i < n) { j = i + 1; while (j < n && pts[j] != NULL) j++; // reverse if (rev) { mid = i + (j - i) / 2; sum = i + j; for (int x=i+1; x<=mid; x++) swap(pts[x], pts[sum-x]); } rev = !rev; i = j; } for (i=0; i<n; i++) if (pts[i] != NULL) printf(" %d ", pts[i]->val); } int main() { TreeNode* root = new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); root->left->left = new TreeNode(4); root->right->left = new TreeNode(5); root->right->right = new TreeNode(6); zigzag(root); return 0; } 用普通的队列加标记即可实现。
点赞
回复
分享
发布于 2018-05-08 22:43
尘归空
华中科技大学 C++
楼主来一发面经~
点赞
回复
分享
发布于 2018-05-03 21:54
牛客2306883号
用doubly linked list实现队列,一个变量存当前层traverse方向,根据方向判断存取node的方向和顺序。。。
点赞
回复
分享
发布于 2018-02-17 12:05
简单的电脑
中国石油大学(北京) Java
关键一个队列不知道什么时候换向折返
点赞
回复
分享
发布于 2017-10-29 20:05
无聊刷刷题
University of Alaska Fairbanks Java
之字形一个队列完成?你倒是叫面试官说说怎么做啊。反正,我是不知道一个队列要怎么打之字形。
点赞
回复
分享
发布于 2017-10-29 18:31
牛客2845888号
北京航空航天大学 算法工程师
意思是上一层和下一层的数要分开,可以用两个变量numPrevious,numNext分别记录上一层和下一层在序列中的个数,numPrevious减1的时候numNext要加上对应的子数的个数,当numPrevious为0的时候表示该行结束了,如果numNext不为0就把numNext赋给numPrevious,如果为0就表示树结束了。
点赞
回复
分享
发布于 2017-10-29 18:05
天行键
华中科技大学 Java
队列可以反向迭代(java api)
点赞
回复
分享
发布于 2017-10-17 11:04
嘻希
宇宙大学 前端工程师
请问快手哪里投递
点赞
回复
分享
发布于 2017-09-29 09:41
我家的狗不咬人
山东大学 运营
你表演的啥绝活呀,兄弟?
点赞
回复
分享
发布于 2017-09-25 18:15
Jungggle
重庆大学 Java
感觉咋样啊
点赞
回复
分享
发布于 2017-09-25 18:15
husama
吉林大学 Java
都问些啥
点赞
回复
分享
发布于 2017-09-25 17:42
光头小强
清华大学 Java
面经呢???23333333333333
点赞
回复
分享
发布于 2017-09-25 17:31
暂无评论,快来抢首评~
相关推荐
01-19 09:27
传音控股_软件工程部_系统软件开发工程师
招不起人,就别占着坑
1. 招聘信息与实际严重不符 「挂羊头卖狗肉」式招聘:岗位描述光鲜(如「高薪管理岗」),实际是销售、地推等基础岗位,甚至存在「入职后调岗」的套路。薪资模糊化:标注「月薪8K-15K」,但底薪仅3K,其余全靠绩效或画饼期权。管理制度混乱:用「弹性工作制」「成长空间大」等模糊表述掩盖低薪高压现实。2. 流程不透明与HR失职「已读不回」成常态:简历投递后石沉大海,或面试后无反馈,消耗求职者时间与期待。单方面时间压迫:要求候选人「随时到岗面试」,但企业方频繁改期或迟到,缺乏尊重。 3. 职场PUA与不平等条款「福报论」泛滥:以「学习机会」「团队年轻化」为由压榨实习生或新人,甚至要求无偿加班。歧视性要求...
找工作以来,你最看不惯_...
点赞
评论
收藏
分享
01-22 12:28
文远知行_感知算法工程师(准入职员工)
智元机器人内推,智元机器人内推码
来到智元快一个月了,更新一下实习体验 1.地理位置:智元上海总部在康桥,离上海迪士尼很近,但是属于郊区,到外滩坐地铁要一个小时 2.周围物价:公司楼下的商务区饭菜是上海水准,平均一餐25左右,牛肉面28。但是!距离500m左右的秀沿路上有大大小小几十家餐馆,木桶饭,张亮麻辣烫,灌汤包,麦当劳,塔斯丁,鸡公煲,烧烤店,好吃的不要太多!而且物价很便宜,和重庆类似,平均一餐15—20,团购的至尊烤鸡才19元,赚麻了 3.租房:(更新)康桥区的租房真的有点乱,我被骗了2000,当时是贝壳上找到的房源,到了现场说他是房东,拿出了他自己搞的虚假合同,里面有2000的一年的物业费,可以退,我微信转账给了他。...
三奇智元机器人科技有限公司公司福利 86人发布
点赞
评论
收藏
分享
2025-12-29 14:19
已编辑
门头沟学院 Java
28届约不到面,孩子焦虑死了
本来以为有了一段实习之后会好一点,结果没啥产出,也约不到面,投了简历之后就没反应了,各位牛爷爷能帮忙看看嘛😭😭投的很多大厂都挂了,商汤,Momenta这种都没后续美团快手那些还没敢投😭
点赞
评论
收藏
分享
2025-12-04 17:11
上海交通大学 算法工程师
大三想找实习
大三,想找实习,有没有好心人帮我看看简历对自己个人水平没什么自信,搞科研基本都靠vibe coding,最近才开始刷力扣,有点害怕被hr拷问,在一个做cv的实验室里干了半年多,共一的论文基本上是学长的idea,我负责把学长口头说的idea实现在代码上(绝大部分代码是我实现的),其他的经历只能说尝试过,想找个算法或者开发岗,第一段实习以积累经验为主,由于还没有决定以后做什么,所以希望尝试更多的方向也可以给我一些建议,比如需要准备什么,推荐背什么八股之类,谢谢大家了!
牛油果甜奶昔:
上海交通大学字号加大,字体加粗
点赞
评论
收藏
分享
01-21 21:52
哈尔滨工业大学(威海) Java
扎西拉姆的事业经历(一)
Chap1 事业主线的确定“学弟,采访你一下,你在拿录取通知书的时候,对大学四年的自己有什么期待呢?”大一的石学弟思考良久,回复了我一个猫猫“耄耋”表情包。“加入威软实验室,拿大厂offer,找到女朋友。学长,你呢?”我呢?我高三的时候就知道,大学里有七条路,一保二考三就业,四留五公六创业,再加上一个“混吃等死”,没关系,人生是旷野————开玩笑,学历变不了现,不都是白扯吗?所以,我绝不考研。唐学长是某军工985的19级本科生,他对他压抑的本科生涯恨之入骨。大学前两年,他活在育才高中的回忆中,而后两年,则活在浙大上岸的渴望里。他从大三开始苦苦备战约15个月,动态里将校园比作肖申克,最后以400...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
实习产出如何包装?
9328
2
...
32岁程序员猝死,底薪3千要24h待岗
2904
3
...
【官方活动】牛客新春计划:给陌生人的一封信
2636
4
...
实习生怎么快速融入团队
2368
5
...
后端从0开始来得及吗
1399
6
...
27届实习全时间全方位大体指南
1350
7
...
20多岁最痛苦的年纪
1277
8
...
绷不住了,找了一个月实习嵌入式还找不到
1231
9
...
25届工作半年,想辞职了
1131
10
...
在咖啡店、家里、公司走廊哪里都可以来一场面试
1061
创作者周榜
更多
正在热议
更多
#
牛客十周岁生日快乐
#
206748次浏览
1930人参与
#
你觉得什么岗位会被AI替代
#
34899次浏览
232人参与
#
我和mentor的爱恨情仇
#
101673次浏览
922人参与
#
一人一个landing小技巧
#
143114次浏览
1498人参与
#
如果工作一直消耗情绪还要继续做吗
#
18095次浏览
83人参与
#
四大天坑是哪四家?
#
101603次浏览
235人参与
#
互联网公司评价
#
479720次浏览
4091人参与
#
机械人春招想让哪家公司来捞你?
#
377759次浏览
3127人参与
#
聊聊你的被动加班经历
#
4258次浏览
80人参与
#
在国企工作的人,躺平了吗?
#
392048次浏览
3951人参与
#
我的求职精神状态
#
422466次浏览
3075人参与
#
华为工作体验
#
289399次浏览
1376人参与
#
实习吐槽大会
#
404950次浏览
2168人参与
#
工作压力大怎么缓解
#
138851次浏览
1260人参与
#
找工作以来,你最看不惯__
#
17400次浏览
352人参与
#
你的mentor是什么样的人?
#
49277次浏览
705人参与
#
第一次找实习,我建议__
#
69298次浏览
841人参与
#
实习教会我的事
#
52155次浏览
412人参与
#
实习怎么做才有更好的产出
#
13911次浏览
263人参与
#
AI coding的好用工具分享
#
21446次浏览
409人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务