#牛客堂直播视频#常见面试题精讲(四)(8.12)

【本期题目】 
1、如何仅用递归函数和栈操作逆序一个栈
【题目】
一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,而不能用另外的数据结构。
【难度】
★★☆☆

2、判断一个链表是否为回文结构
【题目】
给定一个链表的头节点head,请判断该链表是不是回文结构。
例如:
1->2->1,返回true。
1->2->2->1,返回true。
15->6->15,返回true。
1->2->3,返回false。

进阶:
如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。

3、二叉树的序列化和反序列化
【题目】
二叉树被记录成文件的过程,叫做二叉树的序列化,通过文件内容重建原来二叉树的过程叫做二叉树的反序列化。给定一棵二叉树的头节点head,并已知二叉树节点值的类型为32位整型。请设计一种二叉树序列化和反序列化的方案并用代码实现。

4、构造数组的MaxTree
【题目】
定义二叉树节点如下:
public class Node {
public int value;
public Node left;
public Node right;

public Node(int data) {
this.value = data;
}
}

一个数组的MaxTree定义如下:
数组必须没有重复元素;
MaxTree是一棵二叉树,数组的每一个值对应一个二叉树节点;
包括MaxTree树在内并且在其中的每一颗子树上,值最大的节点都是树的头;

给定一个没有重复元素的数组arr,写出生成这个数组的MaxTree的函数,要求如果数组长度为N,时间复杂度O(N),额外空间复杂度O(N)

注:下面回帖给出了源代码供参考。

【分享嘉宾介绍】
左程云
华中科技大学本科--计算机科学与技术专业、 芝加哥大学硕士--计算机科学专业
IBM软件工程师、 百度软件工程师、 刷题5年的算法热爱者
《程序员代码面试指南--IT名企算法与数据结构题目最优解》 作者,电子工业出版社7月底将出版发行,书籍涉及算法与数据结构编程题目240道以上,并且个人实现出最优解,大部分题目为面试高频题

【参与牛客堂直播】
每周三晚8:00~9:30,直播页面http://www.nowcoder.com/live/courses

【直播题目讨论】
加入牛客3群260877110

本期答案领取地址

加入牛客5群(272820159)   
群资料中文件:#牛客堂直播视频#2015.8.12答案
全部评论
本期答案领取地址:     加入牛客2016校招BAT内推(318311545 )    群资料中文件:#牛客堂直播视频#2015.8.12答案
点赞 回复
分享
发布于 2015-08-14 14:45
,,
点赞 回复
分享
发布于 2015-08-18 15:32
博乐游戏
校招火热招聘中
官网直投
第三题进阶不明白啊,只有左子树和只有右子树的前序遍历序列化相同,但结构不同啊
点赞 回复
分享
发布于 2015-08-21 20:46
最后一题用建堆的方法建立二叉树不是更方便实现吗
点赞 回复
分享
发布于 2015-08-22 17:21
不错谢谢谢谢
点赞 回复
分享
发布于 2015-08-27 22:42
不错不错不错
点赞 回复
分享
发布于 2015-08-30 10:28
点赞 回复
分享
发布于 2015-08-31 10:41
请问牛客2016校招BAT内推(318311545 )   为什么不允许加入了呢?
点赞 回复
分享
发布于 2015-09-06 09:56
第四题好
点赞 回复
分享
发布于 2015-09-08 14:40
左老师牛逼
点赞 回复
分享
发布于 2015-09-24 14:55
字符串匹配怎么没有讲解
点赞 回复
分享
发布于 2015-10-04 15:22
public static Node getMaxTree(int[] arr){ Node[] nArr=new Node[arr.length]; for(int i=0;i!=arr.length;i++){ nArr[i]=new Node(arr[i]); } Stack<Node> stack=new Stack<Node>(); Map<Node,Node> lBigMap=new HashMap<Node,Node>(); Map<Node,Node> rBigMap=new HashMap<Node,Node>(); for(int i=0;i!=nArr.length;i++){ Node curNode=nArr[i]; while(!stack.isEmpty()&&stack.peek().value<curNode.value){ popStackSetMap(stack,lBigMap,rBigMap,curNode); } stack.push(curNode); } while(!stack.isEmpty()){ popStackSetMap(stack,lBigMap,rBigMap,null); } Node head =null; for(int i=0;i!=nArr.length;i++){ Node curNode=nArr[i]; Node left=lBigMap.get(curNode); Node right=rBigMap.get(curNode); if(left==null&&right==null){ head=curNode; }else if(left==null){ if(right.left==null){ right.left=curNode; }else{ right.right=curNode; } }else if(right==null){ if(left.left==null){ left.left=curNode; }else{ left.right=curNode; } }else{ Node parent =left.value<right.value?left:right; if(parent.left==null){ parent.left=curNode; }else{ parent.right=curNode; } } } return head; } public static void popStackSetMap(Stack<Node> stack,Map<Node,Node> lmap,Map<Node,Node> rmap,Node curNode){ Node popNode=stack.pop(); if(stack.isEmpty()){ lmap.put(popNode,null); }else{ lmap.put(popNode, stack.peek()); } rmap.put(popNode, curNode); } 第4题改进版
点赞 回复
分享
发布于 2015-11-25 22:42

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务