首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
牛客1610600号
2017-10-17 12:42
已编辑
北京航空航天大学 算法工程师
关注
已关注
取消关注
面完快手,一道问题求指教
我跪的那道算法题,我跪不瞑目
剑指offer里的:
按之字形顺序打印二叉树
因为原来没刷过这道题,经过思考后,觉得用一个队列和一个栈可以完成
虽然我的答案不对,但是面试官说可以用一个队列就能完成,用空指针判断每行是不是结束。。。。
我到现在还是不明白面试官的想法。。。。。大佬们请指教
提示
全部评论
推荐
最新
楼层
zohar727
湖南科技大学 前端工程师
是不是要会双击666
点赞
回复
分享
发布于 2017-09-25 18:08
你们都有offer,只有我没有offer
某山村小学 Java
肯定是你没有 吃灯泡,吃辣椒那种绝技,
点赞
回复
分享
发布于 2017-09-25 18:12
牛客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
光头小强
清华大学 Java
面经呢???23333333333333
点赞
回复
分享
发布于 2017-09-25 17:31
husama
吉林大学 Java
都问些啥
点赞
回复
分享
发布于 2017-09-25 17:42
Jungggle
重庆大学 Java
感觉咋样啊
点赞
回复
分享
发布于 2017-09-25 18:15
我家的狗不咬人
山东大学 运营
你表演的啥绝活呀,兄弟?
点赞
回复
分享
发布于 2017-09-25 18:15
嘻希
宇宙大学 前端工程师
请问快手哪里投递
点赞
回复
分享
发布于 2017-09-29 09:41
天行键
华中科技大学 Java
队列可以反向迭代(java api)
点赞
回复
分享
发布于 2017-10-17 11:04
牛客2845888号
北京航空航天大学 算法工程师
意思是上一层和下一层的数要分开,可以用两个变量numPrevious,numNext分别记录上一层和下一层在序列中的个数,numPrevious减1的时候numNext要加上对应的子数的个数,当numPrevious为0的时候表示该行结束了,如果numNext不为0就把numNext赋给numPrevious,如果为0就表示树结束了。
点赞
回复
分享
发布于 2017-10-29 18:05
无聊刷刷题
University of Alaska Fairbanks Java
之字形一个队列完成?你倒是叫面试官说说怎么做啊。反正,我是不知道一个队列要怎么打之字形。
点赞
回复
分享
发布于 2017-10-29 18:31
简单的电脑
中国石油大学(北京) Java
关键一个队列不知道什么时候换向折返
点赞
回复
分享
发布于 2017-10-29 20:05
牛客2306883号
用doubly linked list实现队列,一个变量存当前层traverse方向,根据方向判断存取node的方向和顺序。。。
点赞
回复
分享
发布于 2018-02-17 12:05
尘归空
华中科技大学 C++
楼主来一发面经~
点赞
回复
分享
发布于 2018-05-03 21:54
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
牛客269
字节跳动_抖音钱包_后端工程师
用一个双端队列,即可解决,设一个标记位,记录上一层的遍历顺序,下一层遍历的时候相反方向遍历即可,同时修改标记位。
点赞
回复
分享
发布于 2018-06-03 15:04
牛客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
还没有回复哦~
相关推荐
03-04 18:43
美团_大数据开发
工科双非一定要读博
标题先给结论,毫无疑问的,不可置疑的,双非工科硕士一定要读博,而且一定要读更好的平台。尽量的,双非硕士起码要读985,985硕士起码要读全球Top100。在知乎、小木虫、一亩三分地,我见过太多“读博无用论”的喧嚣。有人痛斥导师压榨,有人抱怨科研无产出,有人自嘲“读博五年不如工作五年”,更有人断言“博士学历正在贬值”。但如果你和我一样,只是一个出身双非工科、手握普通硕士学历的普通人,请捂住耳朵——这些声音是陷阱,是幸存者偏差的毒药,是既得利益者的凡尔赛。一、博士是打破“学历天花板”的唯一核武器当985硕士在抱怨“华为OD门槛越来越高”时,双非硕士可能还在为争取一个正式编制挣扎;当海归硕士在纠结“...
拉萨大调子:
你读成哈弗还是双非
牛客AI文生图
考研人,我有话说
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
03-07 16:34
喜欢上了mentor
这是我的第二份实习,说实话我起初根本看不上产品运营的工作。在我的固有偏见里,运营跟客服没什么两样,我也根本想象不到我对这份工作有多喜爱。但是突然有一天我就对代码失去了激情,我在想,也许我该尝试下其他的工作。而这次实习,我说不清自己的情绪,我到底喜欢的是这份工作,还是喜欢的是mentor。她是我的面试官,也是我的mentor。她比我大6岁,对我很严厉,经常毫不留情地指出我在工作上的问题,她理性、冷静、犀利,但她的心地又很柔软,总是能非常敏感地捕捉到我的情绪,比如对外沟通时我的窘迫,犯错时我的尴尬,并且在我跟其他部门同事有分歧和争执的时候,毫不多话地为我出头。实习期马上要结束了,我觉得我们之间可能...
牛客418787413号:
按照你的叙述,她工作能力很强,又极其细心和照顾下属,或许你只有站在和她相同的位置上(不是指同岗位,而是指同样优秀)才行。建议和她保持友好关系,多提升自己,在合适的时候追她
牛友故事会
点赞
评论
收藏
分享
01-15 13:52
已编辑
河南大学 Java
时隔半月才回,也是硬气上了
六年要多久:
标准头像,不吃香菜😂
点赞
评论
收藏
分享
03-08 16:13
阿里云_研发工程师JAVA(准入职员工)
阿里云内推
入职一个多月了,来分享一些landing的感受~ 整体说下:可以打85分,毕竟当时辞职就是想要走出舒适圈,的确也会有些不舒适,但基本上是因为阿里和网易风格有差别,需要一些时间适应 我所在的产品线整体风格不卷,加班不严重,周末大家都安排自己的生活,可以安心放下手机,也让我彻底放下“不秒回羞耻症” 阿里云团队规模太大,分工很细,人也很多,想搞清楚一件事情要对接好多好多人,要熟悉的流程也贼多,这个过程的确有些累,但我估计只要在大厂都会这样 感觉这边做事情自由度更高,换句话说,老板只要结果,过程怎么做自己想办法去 凡事凡人都爱讲价值。初次对接的其他部门的同事,也会直接问我,“你对业...
阿里云工作强度 179人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
喜欢上了mentor
4615
2
...
我一事无成啊
4563
3
...
牛客故事会开张!说出你的故事🎤
3604
4
...
虾皮前端日常实习一面
2646
5
...
公司团建点外卖后续,绕路去商场买打折预制饭
2530
6
...
阿里巴巴-暑期实习-后端面经
2403
7
...
不想做公司的牛马,我想要实现自己创业梦
2132
8
...
PDD - 实习 - 笔试
1962
9
...
腾讯云-后台开发-日常实习-一面
1568
10
...
好未来前端25春招一二三连面面经
1526
创作者周榜
更多
正在热议
更多
#
实习/项目/竞赛奖项,哪个对找工作更重要?
#
25976次浏览
361人参与
#
想对2023的自己说的话
#
32983次浏览
311人参与
#
腾讯2025实习生招聘
#
1130次浏览
25人参与
#
牛友故事会
#
52435次浏览
888人参与
#
蚂蚁求职进展汇总
#
29207次浏览
369人参与
#
饿了么求职进展汇总
#
23959次浏览
272人参与
#
面试常问题系列
#
29041次浏览
852人参与
#
机械人值得去的小众企业
#
11628次浏览
35人参与
#
机械人值得去的新能源企业
#
11251次浏览
43人参与
#
你的秋招第一场笔试是哪家
#
66959次浏览
806人参与
#
材料人,你最希望上岸的是?
#
5007次浏览
36人参与
#
面试官是我前女友
#
85650次浏览
645人参与
#
2025退税开始啦
#
40155次浏览
453人参与
#
拼多多求职进展汇总
#
363973次浏览
2903人参与
#
大学生该如何认清当下的就业环境?
#
4525次浏览
26人参与
#
假如你的老板掉河里,你的工作能为他做什么
#
22677次浏览
355人参与
#
面试时被问的最奇葩的问题
#
15818次浏览
93人参与
#
阿里求职进展汇总
#
119643次浏览
1146人参与
#
机械人,秋招第一次笔试的企业是哪家?
#
27126次浏览
263人参与
#
扒一扒那些奇葩实习经历
#
12938次浏览
104人参与
#
机械制造面试点评
#
46633次浏览
305人参与
牛客网
牛客企业服务