题目描述:

  给定一棵二叉搜索树,请找出其中的第k小的结点。例如(5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

  解题思路:

  本题实际上比较简单,主要还是考察对树的遍历的理解,只要熟练掌握了树的三种遍历方式及其特点,解决本题并不复杂,很明显本题是对中序遍历的应用。

  对于本题,我们首先可以知道二叉搜索树的特点:左结点的值<根结点的值<右结点的值。因此,我们不难得到如下结论:如果按照中序遍历的顺序对一棵二叉搜索树进行遍历,那么得到的遍历序列就是递增排序的。因此,只要用中序遍历的顺序遍历一棵二叉搜索树,就很容易找出它的第k大结点。

  举例:

![](https://img2018.cnblogs.com/blog/1608161/201905/1608161-20190521112055125-1702218086.png)

  编程实现(Java):

public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null; public TreeNode(int val) {
this.val = val;
}
} public class Solution {
private int num;
TreeNode KthNode(TreeNode pRoot, int k){
//思路:二叉搜索树中序遍历正好就是递增序列
if(pRoot==null||k<1)
return null;
num=k;
return findKthNode(pRoot);
}
TreeNode findKthNode(TreeNode pRoot){
TreeNode res=null;
if(pRoot.left!=null)
res=findKthNode(pRoot.left);
if(res==null){
if(num==1)
res=pRoot;
--num;
}
if(res==null && pRoot.right!=null) //左边和根都没找到
res=findKthNode(pRoot.right);
return res;
} }

最新文章

  1. Java用户线程和守护线程
  2. Objective-C 快速入门--基础(二)
  3. 1 对WinMain的理解
  4. 配置CAS错误No Certificate file specified or invalid file format
  5. HID class request.
  6. JavaScript 图片轮播入门
  7. poj2635 同余定理 + 素数筛法
  8. 【hihoCoder 1419】重复旋律4
  9. 全民抵制“辱华”品牌秀,D&amp;G神回复:呵呵~ 那不是我!
  10. django之ORM补充
  11. Java自定义注解的使用
  12. 【中间件安全】Jboss安全加固规范
  13. ES6 扩展运算符 三点(...)
  14. App WebView实例化
  15. 囤币一族,被中国市场遗忘的价值币ADA
  16. topcoder srm 460 div1
  17. ngnix笔记
  18. Java设计模式(5)共享模式/享元模式(Flyweight模式)
  19. Spring中的类型转换与数据绑定(PropertyEditor、ConversionService、Data Binding、Formatter)
  20. js 基础 函数传值

热门文章

  1. backup script
  2. webservices系列(五)——javaweb整合Axis2及多service配置
  3. java.text.ParseException: Unparseable date: &amp;quot;2015-06-09 hh:56:19&amp;quot;
  4. Swift代理和传值
  5. crm使用soap启用和停用记录
  6. 96.extjs 页面
  7. PCB Genesis加邮票孔(线与线)实现算法
  8. Stockbroker Grapevine(floyd)
  9. Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖
  10. idea使用svn