首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
黄金罗盘_
2018-09-18 20:48
招银理财有限责任公司_研发中心_软件研发工程师
关注
已关注
取消关注
请问大家,刚才小红书笔试第二题二叉树的那道题怎么做?
请问大家,刚才小红书笔试第二题二叉树的那道题怎么做?
#小红书#
提示
全部评论
推荐
最新
楼层
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
还没有回复哦~
相关推荐
昨天 23:29
哈尔滨工业大学 Java
阿里巴巴工作心得
首先,关于工作时长,要求早上9点半到岗,午饭12点,1点半再回来。再说说工作氛围,和同事们相处得很愉快,但老板就真的是看运气了,阿里换老板的频率高关于涨薪机制,每年财年结束后会进行绩效评定,4月份会沟通涨幅和年终奖,月底发放。最后,学习和成长方面,阿里有很多开放的学习资源,比如各种文档和培训视频。我闲的时候常常去看看别人的总结,收获不少。
投递阿里巴巴等公司10个岗位 >
点赞
评论
收藏
分享
昨天 15:40
山东大学 测试开发
同事的向上管理技巧
1. 所有东西只在ddl时交付,绝不提前交 学习程度:30% 2. 当老板提出不一定对的意见时,先肯定,然后找出一个小点浅浅批评一下,最后最好能绕到是自己没讲清楚上 学习程度:0% 3. 当老板要求头脑风暴时,提出一个非常宏观且正确但是100%无法执行的计划 学习程度:0%,并认为自己永远不可能学会 4. paraphrase老板的话 学习程度:10% 5. 当同事提出自己不是很认同的意见时,回复“好想法,我回头想想” 学习程度:100%,但是在本部门是无法运用了,可以在下份工作里实践 6. 不重要的东西100%表示赞同,给予老板100%的肯定 学习程度:100%,但内心拒绝应用 7. 当同事...
点赞
评论
收藏
分享
10-15 16:27
门头沟学院 C++
感觉被侮辱了
😅
LeoMoon:
建议问一下是不是你给他付钱😅😅
点赞
评论
收藏
分享
10-27 17:26
东北大学 Java
26届,想找日常实习,求拷打
简历放在这了😋
从来不奋斗:
项目也太典了
点赞
评论
收藏
分享
11-22 00:55
武汉理工大学 汽车制造其它
终于秋招完了
秋招的最后阶段,我终于收到了极氪、易控和文远的offer。虽然还在关注小米、轻舟、零跑和华为,但我决定不再参加面试或笔试。易控和文远的诚意让我感动,但综合考虑方向和地点,我还是选择了极氪。这个决定让我有些难受,毕竟其他两家的待遇实在诱人。我在想,为了我热爱的工作和未来,放弃这些是否值得……不过,既然做出了选择,就不该回头了。
牛客创作赏金赛
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
招聘动态
查看更多
字节跳动
2025校园招聘
阿里云管培生
2025届校园招聘
快手Star
2025届招聘
快手
销售类投递专区
富士通(西安)
2025校园招聘
全站热榜
1
...
到了新公司,不要用力过猛
1.8W
2
...
万字长文讲透金融科技方向的就业机会
8369
3
...
校招两方/三方违约模板
7242
4
...
泡出来啦
7134
5
...
华为开奖,详细时间线
6107
6
...
秋招圆满结束!!
6074
7
...
华为开奖?
5966
8
...
今年谨慎等华为
5704
9
...
从露宿街头到百万级种子轮融资②——我的实习期都经历了什么
5538
10
...
听学长的没错
5418
正在热议
#
25届秋招总结
#
384695次浏览
3833人参与
#
实习,投递多份简历没人回复怎么办
#
2431087次浏览
34663人参与
#
阿里云管培生offer
#
54433次浏览
1550人参与
#
地方国企笔面经互助
#
6245次浏览
14人参与
#
ai智能作图
#
13332次浏览
201人参与
#
发工资后,你做的第一件事是什么
#
5451次浏览
24人参与
#
北方华创开奖
#
65160次浏览
526人参与
#
我的实习求职记录
#
6111218次浏览
83869人参与
#
哪些公司校招卡第一学历
#
31753次浏览
91人参与
#
硬件兄弟们 甩出你的华为奖状
#
76698次浏览
621人参与
#
如果再来一次,你还会选择这个工作吗?
#
105190次浏览
1059人参与
#
工作中,你有没有遇到非常爱骂人的领导?
#
4436次浏览
41人参与
#
你觉得第一学历对求职有影响吗?
#
16117次浏览
131人参与
#
在职场上,你最讨厌什么样的同事
#
5293次浏览
72人参与
#
如果你有一天可以担任公司的CEO,你会做哪三件事?
#
9290次浏览
190人参与
#
牛客租房专区
#
4076次浏览
115人参与
#
如果有时光机,你最想去到哪个年纪?
#
27242次浏览
566人参与
#
华为工作体验
#
109655次浏览
853人参与
#
中兴求职进展汇总
#
467092次浏览
2435人参与
#
还记得你第一次面试吗?
#
30553次浏览
429人参与
#
秋招你被哪家公司挂了?
#
344230次浏览
3287人参与
#
许愿池
#
216881次浏览
2544人参与
牛客网
牛客企业服务