首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
Shane-Yu
东华大学 Java
+1
点赞
回复
分享
发布于 2018-09-18 20:49
花生儿
平安金融壹账通_大数据研究院_数据挖掘(准入职)
+2
点赞
回复
分享
发布于 2018-09-18 20:50
VVV威威威
电子科技大学
A了几道
点赞
回复
分享
发布于 2018-09-18 20:52
hulun
华中科技大学 Java
0.8和0.9感觉凉了
点赞
回复
分享
发布于 2018-09-18 20:57
求杭州收留
北京邮电大学 C++
利用层序和中序创建二叉树 然后遍历就行了。。
点赞
回复
分享
发布于 2018-09-18 21:12
求杭州收留
北京邮电大学 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
狼来了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
麻瓜工程师
Nvidia英伟达_亚洲研发中心_系统工程师
我是根据层序和中序重建一棵树,然后遍历
点赞
回复
分享
发布于 2018-09-19 12:34
还没有回复哦~
相关推荐
昨天 18:25
凡岛_F计划管培生(准入职员工)
广州凡岛内推广州凡岛面经
管培生面经:请简要介绍一下你自己,包括教育背景、实习经历、个人特长等。谈谈你未来 3-5 年的职业规划,你希望在凡岛如何实现这些目标?为什么你想加入广州凡岛做管培生?为什么选择这个方向就业?你认为自己最大的优势是什么?有哪些不足?你准备如何提升自己的不足?工作中如果遇到压力和与同事的冲突,你会如何应对?有没有当过团队 leader 的角色?分享一下当 leader 的项目经历,遇到过什么困难,如何解决?在过往的团队经验中,你觉得自己新获得的能力是什么?你通常在团队中扮演怎样的角色?如果要你管理团队,你会是严厉风格还是宽和风格?讲述一次团队合作中与成员意见不合的经历,你是如何处理的?如果你的专业...
凡岛网络
|
校招
|
超多精选岗位
投递凡岛等公司10个岗位 >
点赞
评论
收藏
分享
02-21 09:12
浙江科技大学 前端工程师
面试被问“你的缺点是什么?”怎么答
正常抛出一个缺点(跟岗位能力要求相关),并补充经过学习已经改善。例:我的缺点是埋头苦干,缺少交流。但经过实习已经学会复杂需求先交流,理清思路。遇到代码问题,先在论坛或GPT寻找解法,处理不了再寻求同事帮助。同时要注意时间,超过XXXX时间就另寻他法。
凉风落木楚山秋:
找点无关紧要的就行了。 比如学习得广泛快速,但是偶尔忘记细节。太注重于学习,技术还需要磨练。太注重技术细节,生活比较宅。 利用事物的正反两面这样子用优点带出缺点 这样碰到优点缺点,闭着眼睛答
面试被问“你的缺点是什么?”怎么答
点赞
评论
收藏
分享
01-02 00:50
三峡大学 Java
简历求优化
我是 26 届的,感觉我的简历还有点问题,想请友友们帮忙看看,有什么地方需要优化的地方,然后我的成绩排名是66/290,这个成绩算优势吗?我简历上没有写这个,不知道补不补上去#投了多少份简历才上岸# #简历中的项目经历要怎么写# #最后再改一次简历# #我的简历长这样# #你的简历改到第几版了#
程序员牛肉:
这简历一出手就离失业不远了。 作为一家公司来讲,我如果要招日常实习生,那我对实习生最基本的要求就是要能干活,毕竟你就待三四个月,谁会留心培养你? 那么除了院校之外,最重要的就是项目和实习了。没有实习的话项目就好好搞。 但是你说你这个项目吧:课程作业管理系统和TMS运输管理系统。这两个基本就和闹着玩差不多。 你作为一个想要应聘Java开发实习生的人,对后端的理解还仅仅停留在:“使用mapper和sql映射”,“使用SQL进行多表调用”,“基于MySQL简历表结构”,“基于Spring boot完成CURD操作”这种玩具上......... 找不到后端实习的
投了多少份简历才上岸
简历中的项目经历要怎么写
点赞
评论
收藏
分享
02-24 15:49
vivo_运营_HR
vivo26届实习内推
不得不说今年实习开的真早, 这才刚开学暑期实习和日常实习就开了,26届的同学估计还没做好准备,可以先mark这篇帖子,后面有空来这里取内推码投递 看一一下实习岗位还是蛮多,hc算中等设计类 研发类 供应链类 产品运营类 市场类都覆盖了。 工作地点广东江苏等地都有,有能力的一定要投一下实习,直接转正就不用操心秋招了,真的挺爽,至少心里能踏实的再找其他工作入职vivo有一段时间了,强度是有一些,但是平时总有一些时候比如一些活动,聚会之类的能让人感觉到放松,上班的心态和学生区别还是很大的,大家现在投简历虽然累,之后还有一个暑假可以好好享受呢 ,别怕今年校招生住工业园C区,环境如图,环境尚可...
投递vivo等公司10个岗位 >
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
招聘动态
查看更多
米哈游
2025春季校园招聘
25年薪资合集点击领取!
京东 TET管培生
全站热榜
更多
1
...
实习怎么偷产出?
2.5W
2
...
怎么实习,含金量最高?
1.0W
3
...
有奖征文:职场上哪些行为很加分?投稿得丰厚奖励!
8313
4
...
字节春招前端一面二面凉经
6329
5
...
面试大厂反拷打指南(字节&腾讯)
5519
6
...
腾讯实习基地hr 一面挂
5332
7
...
字节生活服务后端开发日常实习一二三面经
5199
8
...
工科双非一定要读研
4994
9
...
告诉俺娘,俺不是孬种!鼓起勇气管mentor要饭钱了(有后续了)
4689
10
...
明知道自己考不上研,还要坚持吗?
4162
创作者周榜
更多
正在热议
更多
#
如何KTV领导
#
31132次浏览
250人参与
#
研究所笔面经互助
#
55058次浏览
394人参与
#
掌阅春招
#
88660次浏览
513人参与
#
你投递的公司有几家约面了?
#
39033次浏览
227人参与
#
软开人,秋招你打算投哪些公司呢
#
66869次浏览
715人参与
#
生物制药/化工校招攻略
#
33750次浏览
265人参与
#
软件开发春招备战日记
#
57529次浏览
492人参与
#
当下环境,你会继续卷互联网,还是看其他行业机会
#
72456次浏览
537人参与
#
如何缓解入职前的焦虑
#
141555次浏览
1126人参与
#
你遇到过哪些神仙同事
#
45062次浏览
424人参与
#
你最近一次加班是什么时候?
#
31750次浏览
249人参与
#
vivo求职进展汇总
#
167829次浏览
1020人参与
#
产品每日一题
#
29018次浏览
404人参与
#
考研人,我有话说
#
14381次浏览
275人参与
#
你今年的平均薪资是多少?
#
94211次浏览
461人参与
#
TP-LINK工作体验
#
38490次浏览
786人参与
#
还记得你第一次面试吗?
#
75824次浏览
1094人参与
#
上班苦还是上学苦呢?
#
201284次浏览
1235人参与
#
想给25届机械人的秋招建议
#
22474次浏览
202人参与
#
在职场上,你最讨厌什么样的同事
#
10612次浏览
125人参与
#
秋招白月光
#
52651次浏览
775人参与
牛客网
牛客企业服务