首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
黄金罗盘_
2018-09-18 20:48
辽宁大学 Java
关注
已关注
取消关注
请问大家,刚才小红书笔试第二题二叉树的那道题怎么做?
请问大家,刚才小红书笔试第二题二叉树的那道题怎么做?
#小红书#
提示
全部评论
推荐
最新
楼层
ybf
武汉大学 算法工程师
感觉python写起来比较方便:https://www.cnblogs.com/ybf-yyj/p/9671437.html
点赞
回复
分享
发布于 2018-09-18 21:11
Jose丶
东南大学 Java
import java.util.*; /** * Created by jose on 2018/9/18. */ public class Red2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()){ String line = sc.nextLine(); String[] levelarr = line.split(" "); List<Integer> level = new ArrayList<>(); for (int i = 0; i <levelarr.length; i++) { level.add(Integer.valueOf(levelarr[i])); } line = sc.nextLine(); String[] midarr = line.split(" "); int[] mid = new int[midarr.length]; for (int i = 0; i < midarr.length; i++) { mid[i]= Integer.parseInt(midarr[i]); } boolean[] visited = new boolean[1024]; Node head = build(level,mid,visited,0,mid.length-1); leaf(head); System.out.println(); pre_visited(head); System.out.println(); pos_visited(head); } } static void leaf(Node node){ if(node==null) return; if(node.left == null&&node.right==null) { System.out.print(node.value+" "); } leaf(node.left); leaf(node.right); } static void pre_visited(Node node){ if(node == null) return; System.out.print(node.value+" "); pre_visited(node.left); pre_visited(node.right); } static void pos_visited(Node node){ if(node == null) return; pos_visited(node.left); pos_visited(node.right); System.out.print(node.value+" "); } static class Node{ int value; Node left; Node right; } public static Node build(List<Integer> level,int[] mid,boolean[] visited,int left,int right){ if(level.size()==0) return null; Node head = new Node(); head.value = level.get(0); int pos=0; for (int i = left; i <= right; i++) { if (level.get(0) == mid[i]){ pos=i; break; } } int cleft = left; int cright = pos-1; for (int i = 0; i < 1024; i++) { visited[i]=false; } for (int i = cleft; i <= cright; i++) { visited[mid[i]] = true; } List<Integer> leftchild=new ArrayList<>(); List<Integer> rightchild=new ArrayList<>(); for (int i = 1; i < level.size(); i++) { if(visited[level.get(i)]){ leftchild.add(level.get(i)); }else { rightchild.add(level.get(i)); } } head.left=build(leftchild,mid,visited,left,cright); head.right=build(rightchild,mid,visited,pos+1,right); return head; } }
点赞
回复
分享
发布于 2018-09-18 21:05
麻瓜工程师
Nvidia英伟达_亚洲研发中心_系统工程师
我是根据层序和中序重建一棵树,然后遍历
点赞
回复
分享
发布于 2018-09-19 12:34
狼来了5
米哈游_后端工程师
class TreeNode(object): def __init__(self,x): self.val = x self.left = None self.right = None class Solution(object): tree = None pre = [] post = [] end = [] def preorder(self,root): if not root: return self.pre.append(root.val) self.preorder(root.left) self.preorder(root.right) def postorder(self,root): if not root: return self.postorder(root.left) self.postorder(root.right) self.post.append(root.val) def endnode(self,root): if not root: return [] queue1 = [root] queue2 = [] while queue1: cur = queue1.pop(0) if not cur.left and not cur.right: self.end.append(cur.val) if cur.left: queue2.append(cur.left) if cur.right: queue2.append(cur.right) if queue1 == []: queue1 = queue2 queue2 = [] def build(self, sub_levelorder, sub_inorder): if sub_inorder == []: return None root_value = sub_levelorder[0] root = TreeNode(root_value) index = sub_inorder.index(root_value) left_sub_inorder = sub_inorder[:index] right_sub_inorder = sub_inorder[index + 1:] left_sub_levelorder,right_sub_levelorder = [],[] # 按照层次遍历,第一个出现的就是根节点,然后找到中序中根节点的位置,分成左右两个子树的中序。再根据这个中序的序列,找到左右子树层次遍历的序列 # 考试的时候这一步没做好,一直做不出来,看了@ningshixian的做法。 for each in sub_levelorder[1:]: if each in left_sub_inorder: left_sub_levelorder.append(each) else: right_sub_levelorder.append(each) root.left = self.build(left_sub_levelorder, left_sub_inorder) root.right = self.build(right_sub_levelorder, right_sub_inorder) return root def buildTree(self, levelorder, inorder): """ :type preorder: List[int] :type inorder: List[int] :rtype: TreeNode """ if levelorder == [] or inorder == []: return None self.tree = self.build(levelorder, inorder)
点赞
回复
分享
发布于 2018-09-18 22:20
求杭州收留
北京邮电大学 C++
Python解法 利用层序和中序递归创建二叉树,然后递归打印叶子节点,morris 前序后序遍历二叉树 # -*- coding=utf-8 -*- class TreeNode(): def __init__(self, val): self.val = val self.left = None self.right = None class Solution(): def recreate_tree(self, level, mid_order): if not level or not mid_order: return None root = TreeNode(level[0]) root_index = mid_order.index(level[0]) left_mid_order = mid_order[:root_index] right_mid_order = mid_order[root_index+1:] left_level = [item for item in level if item in left_mid_order] right_level = [item for item in level if item in right_mid_order] root.left = self.recreate_tree(left_level, left_mid_order) root.right = self.recreate_tree(right_level, right_mid_order) return root def morris_pre_traverse(self, root): if root is None: return None cur = root most_right = None while cur: most_right = cur.left if most_right: while most_right.right and most_right.right != cur: most_right = most_right.right if most_right.right is None: most_right.right = cur # 第一次到达即打印 print(cur.val, end=' ') cur = cur.left continue else: most_right.right = None else: # 没有左子树的只会到达一次 print(cur.val, end=' ') cur = cur.right print('') def print_leaf(self, root): if not root.left and not root.right: print(root.val, end=' ') return if root.left: self.print_leaf(root.left) if root.right: self.print_leaf(root.right) def morris_post_traverse(self, root): if root is None: return None cur = root most_right = None while cur: most_right = cur.left if most_right: while most_right.right and most_right.right != cur: most_right = most_right.right if most_right.right is None: most_right.right = cur cur = cur.left continue else: most_right.right = None # 在第二次到达时逆序打印cur节点的左子树的右边界 self.print_edge(cur.left) cur = cur.right # 逆序打印整个二叉树的右边界 self.print_edge(root) print('') def print_edge(self, node): tail = self.reverse_edge(node) temp = tail while temp: print(temp.val, end=' ') temp = temp.right self.reverse_edge(tail) def reverse_edge(self, node): pre = None while node: next_node = node.right node.right = pre pre = node node = next_node return pre if __name__ == "__main__": level = list(map(int, input().split())) mid_order = list(map(int, input().split())) ex = Solution() root = ex.recreate_tree(level, mid_order) ex.print_leaf(root) print('') ex.morris_pre_traverse(root) ex.morris_post_traverse(root)
点赞
回复
分享
发布于 2018-09-18 21:22
求杭州收留
北京邮电大学 C++
利用层序和中序创建二叉树 然后遍历就行了。。
点赞
回复
分享
发布于 2018-09-18 21:12
hulun
华中科技大学 Java
0.8和0.9感觉凉了
点赞
回复
分享
发布于 2018-09-18 20:57
VVV威威威
电子科技大学
A了几道
点赞
回复
分享
发布于 2018-09-18 20:52
花生儿
平安金融壹账通_大数据研究院_数据挖掘(准入职)
+2
点赞
回复
分享
发布于 2018-09-18 20:50
Shane-Yu
东华大学 Java
+1
点赞
回复
分享
发布于 2018-09-18 20:49
暂无评论,快来抢首评~
相关推荐
12-19 17:46
门头沟学院 销售工程师
任何人都可以拥有的超优秀实习经历
我发现实习话题上的网友分为两种:一种是正常交流经验的,一种是学历警察+大厂卫道士。第二种特征非常明显,看到有人分享小厂/创业公司实习就来嘴一句:这也算实习?没有大厂经历简历直接筛掉建议gap一年再投。可能名为职场焦虑有传染性,已经从应届生感染到在职人员了。几乎我看到的每一个非大厂实习经验贴下面都有这种学历警察。但小破二本学姐来现身说法:优秀的实习经历≠大厂logo,任何人都可以通过普通实习获得超优秀的成长!叠甲:大厂里的优秀实习肯定还是会更亮眼的嗯什么是真正优秀的实习?✅ 有清晰的产出✅ 掌握了某某技能✅ 理解并能复现完整的工作流✅ 能独立解决问题✅ 有可展示的作品这些能力,跟公司大小无关,跟...
任何人都可以系列
点赞
评论
收藏
分享
12-23 21:38
腾讯_HR(准入职员工)
腾讯云智研发内推,腾讯云智研发内推码
真实体验是有超好的导师制定成长计划,全程辅导,各种腾讯内部学习网站和资料,上下班班车接送,然后基本一月团建一次。工作压力中等,百分之70情况能6点多下班,其他情况一般在8点左右。早投递,早筛选,早拿offer.!!!敲重点 用我的内推码投递后一定要评论区留言mark一下,以后好找我查进度,我秋招就是随便填别人的内推码,后来查进度都不知道找谁。惨痛的经历。腾讯集团旗下|云智研发公司26届校招内推启动!【公司简介】云智研发公司是腾讯旗下的子公司,公司坚持投资区域书,布局研发人才,聚集云和智慧产业基础产品和行业标准产昂的研发。推进云与产业互联网战略落地,助力产业数字化转型升级,公司规模超过5000人...
腾讯云智研发成长空间 5079人发布
点赞
评论
收藏
分享
11-20 23:12
广东科技学院 Java
秋招?就这?
标题党了兄弟们,抱歉民办本科,秋招无果,转战实习,给面试的公司都小公司,并且上周是连挂3个公司,已经感觉到Java这个行业的卷了,不知道还要不要继续坚持Java,,还是转战测试呢??
深情是罪:
鱼皮的项目
点赞
评论
收藏
分享
12-24 16:49
睿琪软件_产品经理(准入职员工)
滴滴内推,滴滴内推码
滴滴后端一二面面经一面40min纯技术面,面试官很友好,时不时会对你微笑,然后点头表示肯定,答对了还会说说得对。挑选一个你最想介绍的项目介绍一下,没有深挖。八股盛宴:C++、C、数据结构、数据库。总结就是不是简单的问你什么是虚函数,然后你说个虚指针,虚函数表就完事了。还会问你空指针可以调用类的方法吗?调用虚函数或者非静态成员变量的非虚函数为什么会崩溃?在什么阶段?大概就是这个意思,所以需要对每个方向的知识点有很深的理解,或者说实际开发中切实的应用过才能答得出来。二面25min个人感觉是目前为止碰到的最让人不解的面试官,全程皱着眉头,问的问题我没理解清楚也不会过多解释,直接默认我不会,然后说那我...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
杂记近期所面试的三家中小厂
1.0W
2
...
2025的主旋律是蛰伏,落寞,遗憾
9201
3
...
牛客2025年终报告重磅上线——揭晓你的年度修炼成就!
7630
4
...
选择即命运—2025年度总结
6060
5
...
圣诞节用 AI 做个牛客运营翻翻乐!(含代码)
6060
6
...
牛客年终报告,今日道爷我成了
5319
7
...
大学废物离开优绩主义之后发现外面根本没下雨
4574
8
...
从H200解禁评估:国资算力平台还值得应届就业吗?
4361
9
...
互联网实习求职的黑话和timeline,你所需要知道的……
3954
10
...
实习没事做是福也是祸
3309
创作者周榜
更多
正在热议
更多
#
牛客2025仙途报告
#
3010次浏览
97人参与
#
工作两年,想和老板谈涨薪怎么说
#
38717次浏览
175人参与
#
2025年终总结
#
176112次浏览
2978人参与
#
你面试体验感最差/最好的公司
#
21221次浏览
348人参与
#
秋招落幕,你是He or Be
#
14580次浏览
277人参与
#
一人说一个提前实习的好处
#
12806次浏览
216人参与
#
礼物开箱Plog
#
1203次浏览
40人参与
#
今年你最想重开的一场面试是?
#
5072次浏览
73人参与
#
重来一次,你会对开始求职的自己说
#
6698次浏览
165人参与
#
找工作,行业重要还是岗位重要?
#
85615次浏览
1699人参与
#
实习没事做是福还是祸?
#
18218次浏览
266人参与
#
机械制造秋招总结
#
97319次浏览
878人参与
#
团建是“福利”还是是 “渡劫”
#
7861次浏览
158人参与
#
工作中听到最受打击的一句话
#
7748次浏览
123人参与
#
考公VS就业,你怎么选?
#
88065次浏览
496人参与
#
移动求职进展汇总
#
17868次浏览
143人参与
#
网易求职进展汇总
#
172475次浏览
1422人参与
#
你小心翼翼的闯过多大的祸?
#
11691次浏览
169人参与
#
哪些行业值得去?
#
14369次浏览
74人参与
#
国央企薪资爆料
#
136556次浏览
597人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务