面试题之二叉搜索树的中位数
来源:互联网 发布:dalo流控源码 编辑:程序博客网 时间:2024/05/16 17:07
这个问题不算是很常见的问题,基本上在中文的论坛社区没有看到过,遇见这个是因为偶尔在http://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi 上面注册了账号而看到的,题目如下:
Given a BST (Binary search Tree) how will you find median in that?
Constraints:
* No extra memory.
* Function should be reentrant (No static, global variables allowed.)
* Median for even no of nodes will be the average of 2 middle elements and for odd no of terms will be middle element only.
* Algorithm should be efficient in terms of complexity.
中文不需要赘述了,就是二叉搜索树如何高效地找到中位数,不希望申请内存,不要static/global的变量来实现。
第一反应就是中序遍历就是排序了,但是如果要计数的话,我们需要一个额外的变量,这样恐怕需要或是静态或者全局变量了,故不可以用。但是我们其他很多次都碰到了那样类似的问题,如何把一个二叉树原地转化成双向链表,那时候还有点觉得题目没意思,没啥用处。但是在这里,作用得以体现。假如有形如
10
/ /
6 14
/ / / /
4 8 12 16
的二叉树转化成了4=6=8=10=12=14=16这样一个双链表,那后面的问题就变成了如何在4=6=8=10=12=14=16里面找到中间节点了,这对于我们习惯了2个快慢指针追赶的小朋友来说不算问题了。
下面就是写的一个实现:
说实话这样的题目还是比较喜欢的,考到了很多的概念和想法,
a.中序遍历
b.BST转化成DLL
c.寻找链表的中间节点
如果任何一个问题割裂开了问, 都是比较容易解决的。困难就在于如何用已知的办法组合地解决未知的问题,发人深思,余是以记之。
- 面试题之二叉搜索树的中位数
- 面试题之二叉搜索树的中位数
- 求二叉搜索树的中位数
- 剑指offer面试题之判断二叉搜索树的后序序列
- 剑指offer之面试题24:二叉搜索树的后序遍历序列
- 剑指Offer之面试题24:二叉搜索树的后序遍历序列
- 面试题24:二叉搜索树的后续遍历序列
- 【面试题22】二叉搜索树的后序遍历
- 面试题之二叉树
- 二叉树面试题之二叉树镜像
- 常见的二叉树面试题大汇总(涵盖二叉搜索树)
- 二叉树的面试题
- 二叉树的面试题
- 二叉树的面试题
- leetcode试题之求二叉搜索树的个数
- 基于visual Studio2013解决面试题之0305广度优先搜索二叉树
- 剑指offer之面试题27:二叉搜索树与双向链表
- 剑指offer之面试题27二叉搜索树与双向链表
- 最近的随想
- windows消息机制
- 获取客户地理地址的ASP代码
- error C3861: 'cvCreateHidHaarClassifierCascade': identifier not found
- 关于回调函数
- 面试题之二叉搜索树的中位数
- C#连接Oracle数据库
- 利用JavaScript创建随机数与随机图片
- 业余“菜农”年终总结
- 路由器 集线器 交换机的区别
- Oracle触发器基础
- Twitter的发展史
- 在浏览器中使用弹出窗口
- 虚函数简介