首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
04-29 19:24
广州希音国际进出口有限公司_供应链管理(准入职员工)
SHEIN内推SHEIN内推码
shein供应商运营 一面面经#运营人求职交流聚集地#shein国际物流管培生一面挂了,国庆后收到hr联系面试供应商专员的岗位(主要是供应商运营),这个岗位面了两面,一面是hr面,二面是业务面一面:10.12 全程约35分钟1、自我介绍略2、详细说一下近两段实习的主要工作内容,以及有什么收获3、对shein这个岗位是否了解?对shein这个公司的了解?4、在xx公司管的sku有多少,直接对接的供应商类型有哪些5、xx公司的跨境模式是?6、如何做供应商管理啊?商家表现根据不同维度进行评级打分7、如何和供应商进行谈判,举具体事例说明8、为什么想来shein?说了一下有了解shein的人才培养模式以...
点赞
评论
收藏
分享
04-28 19:04
已编辑
门头沟学院 前端工程师
小鹏前端-一面
amy何时能到二面?项目:一个await的代码题,这个挺寄的 async function request(){ return new Promise(resolve => { setTimeout(() => { console.log("request finished"); resolve(); }, 3000); }); } for(let i=0;i<10;i++){ console.log('start',i) await reque...
小鹏汽车一面24人在聊
查看15道真题和解析
点赞
评论
收藏
分享
03-18 17:22
门头沟学院 Java
27实习
27双非找实习锐评简历🙏🙏🙏
代码飞升:
海投就完了,别管评论区那个sbb卖课的
点赞
评论
收藏
分享
04-25 16:25
已编辑
门头沟学院 嵌入式工程师
一个面试没有,点击就送
华五本,绩点2.91。9k就行,接受996,接受加班,可压榨。——打开牛客看到消息数吓一跳。感谢评论区,我把预期薪资改高一点再投。老家年薪十万就不低了,问了三个同学定位也就在15w,没想到大家是这么看的。——4.11,A公司一面,面试官让我说招聘要求上的几个知识点的理解,没问别的问题,大概率凉(面经全都有手撕代码,问很多问题,到我这没有)。——4.23某微电子公司技术面,hr面同时线下,梦中情司,hr面没表现好,第二天挂。——4.24彻底停止找工作,考研重开了。——4.25一小时内两个offer,一个15w,一个16w,感谢牛友。
DJ懒羊羊大王:
你把复旦大学写上去啊,写,本科,复旦大学,加大加粗,让hr一拿到你的简历就能一眼看到这六个字,其余的不重要
点赞
评论
收藏
分享
04-30 11:30
门头沟学院 设计
五一当然是出去玩呀
去年五一去爬了黄山,前年五一去了西安,大前年五一去了长沙。。小长假当然要出去玩,人生建议是一定要错峰出行!去年去爬黄山,早上五点多就起床了,去爬最早的黄山,那时候人不多,大部分点都打卡了,全程大概7小时爬完,坐缆车上,徒步下,风景真的美死了宏村不建议去,商业化极度严重,门票还贵!但是去宏村的路上风景很好看还有图不让上传了😭😭😭--------------------附带一份五一出行西安计划(作为在西安待了四年的选手,总结了一些值得游客去的景点,西安市区里个人觉得三四天就够了,时间充足可以去爬华山)
五一假期,你打算“躺”还是“卷”?
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
左手敲代码的程序员,不配拥有offer吗?
5.8W
2
...
和ai聊天,忍不住爆哭
1.0W
3
...
给你看看给大学生开10k的前端面经长啥样
7543
4
...
一写代码就哭,因为毕设想退学了
6402
5
...
快手投诉后续- HR把我拉黑了!
5048
6
...
感觉我妈被时代红利保护的太好了
4513
7
...
毕业之后,大家就会回到自己的阶级
4476
8
...
投1000份简历0面试!!!(求助)
4440
9
...
5.1假期你投不投简历
4147
10
...
携程春招火车票oc
2602
创作者周榜
更多
正在热议
更多
#
摸鱼被leader发现了怎么办
#
44099次浏览
317人参与
#
找工作,行业重要还是岗位重要?
#
17623次浏览
292人参与
#
潍柴工作体验
#
20041次浏览
17人参与
#
来聊聊机械薪资天花板是哪家
#
112621次浏览
721人参与
#
你觉得通信/硬件有必要实习吗?
#
94849次浏览
893人参与
#
你最满意的offer薪资是哪家公司?
#
18290次浏览
119人参与
#
金融财会交流会
#
101293次浏览
361人参与
#
硬件兄弟们 甩出你的华为奖状
#
95642次浏览
670人参与
#
机械人与华为的爱恨情仇
#
105801次浏览
923人参与
#
外包能不能当跳板?
#
25538次浏览
192人参与
#
运营面经
#
101537次浏览
1202人参与
#
24届硬件人与华为的爱恨情仇
#
120407次浏览
962人参与
#
大疆求职进展汇总
#
471686次浏览
3178人参与
#
机械人怎么评价今年的华为
#
190855次浏览
1502人参与
#
Offer比较,求稳定还是求发展
#
41890次浏览
227人参与
#
国企还是互联网,你怎么选?
#
126809次浏览
963人参与
#
设计人如何选offer
#
101488次浏览
697人参与
#
盲审过后你想做什么?
#
16356次浏览
121人参与
#
国企/银行/研究所公司爆料
#
124185次浏览
742人参与
#
机械专业只有考研才有出路吗
#
95676次浏览
850人参与
牛客网
牛客企业服务