摘要:
Q:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 T: 1.最 阅读全文
摘要:
Q:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 T: 中序遍历,递归: 非递归: 阅读全文
摘要:
Q:请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点( 阅读全文
摘要:
Q:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 A:BFS,偶数层reverse Q:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 A:BFS,比上面还简单,不用reverse( 阅读全文
摘要:
Q:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 A: 递归: 非递归(感谢@hustZa): 利用DFS: 出栈的时候也是成对成对的 , 1.若都为空,继续; 2.一个为空,返回false; 3.不为空,比较当前值,值不等,返回fa 阅读全文
摘要:
Q:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 T: 分析二叉树的下一个节点,一共有以下情况: 1.二叉树为空,则返回空; 2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找 阅读全文
摘要:
Q:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1 2 3 3 4 4 5 处理后为 1 2 5 A:题目并不难,重要的是, 可以在head前添加一个头结点 ,防止head被删的情况。 Q:给出一个排好序的链表,删除链表中的所有重复出现 阅读全文
摘要:
Q:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 T:第一想法就是设置快慢两个指针。 1.思路:(感谢@却顾所来径) 设置快慢指针,都从链表头出发,快指针每次 走两步 ,慢指针一次 走一步 ,假如有环,一定相遇于环中某点(结论1)。接着让两个指针分别从相遇点和链表头出发 阅读全文
摘要:
Q:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述:如果当前字符流没有存在出现一次的字符,返回 字符。 T: 1.用hash 阅读全文
摘要:
Q:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2"," 123","3.1416"和" 1E 16"都表示数值。 但是"12e","1a3.14","1.2.3","+ 5"和"12e+4.3"都不是。 T: 1.分情况讨论( 实际上我觉得这样写有点 阅读全文