题目:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。

解析:看到我写的下面的代码,像一篇文章一样的长,我也是醉了,先提交上去了。思想就是先来个层次遍历二叉树,得到所有的节点的值,然后再排序,取到第k大的节点的值。当然这个只是值,而不是节点,需要得到具体的节点信息,我们需要再重新遍历下该二叉树,得到节点值为该值的节点,然后返回。

/*
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}
}
*/
import java.util.*;
public class Solution {TreeNode KthNode(TreeNode pRoot, int k){if(k==0){return null;}List<Integer> list = new ArrayList<>();//存节点的值Queue<TreeNode> queue = new LinkedList<>();//存节点if(pRoot==null){return null;}queue.add(pRoot);int current =1;int next=0;while (!queue.isEmpty()){//层次遍历二叉树,然后得到所有节点的值TreeNode node=queue.poll();current--;list.add(node.val);if(node.left!=null){queue.add(node.left);next++;}if(node.right!=null){queue.add(node.right);next++;}if(current==0){current=next;next=0;}}Collections.sort(list);//给遍历的二叉树值的list排序,得到第k大的节点信息if(k>list.size()){return null;}int num=list.get(k-1);queue.clear();queue.add(pRoot);current=1;next=0;TreeNode result=null;while (!queue.isEmpty()){TreeNode node=queue.poll();current--;if(node.val==num){//找到第k大的节点信息,然后返回result=node;return result;}if(node.left!=null){queue.add(node.left);next++;}if(node.right!=null){queue.add(node.right);next++;}if(current==0){current=next;next=0;}}return result;}
}

《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。相关推荐

  1. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  2. 剑指Offer - 面试题33. 二叉搜索树的后序遍历序列(递归)

    1. 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树:5/ \2 6 ...

  3. 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)

    1. 题目 给定一棵二叉搜索树,请找出其中第k大的节点. 示例 1: 输入: root = [3,1,4,null,2], k = 13/ \1 4\2 输出: 4示例 2: 输入: root = [ ...

  4. 剑指offer面试题54. 二叉搜索树的第k大节点(逆中序遍历)

    题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 思路 详见链接 代码 class Solution:def kthLargest(self, root:TreeNode, k:int)-> ...

  5. 剑指offer(C++)-JZ33:二叉搜索树的后序遍历序列(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回 tru ...

  6. 【剑指Offer】23、二叉搜索树的后序遍历序列

      题目描述:   输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   解题思路:   对于后续遍历序列,序 ...

  7. 剑指offer(23)二叉搜索树的后序遍历序列

    前提:二叉搜索树的后续遍历由{左子数.右子树.根}组成,根的值小于右子树,大于左子树. 思路就是:后续遍历sequence,通过与根节点比较,找到左子树与右子树的分界点(i):如果如果分界点前面的数有 ...

  8. 《剑指Offer》36:二叉搜索树与双向链表

    题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向.比如,输入下图中的二叉搜索树,输出转换之后的排序双向链表. 二叉树节点的定义如下 ...

  9. 剑指Offer - 面试题36. 二叉搜索树与双向链表(中序循环/递归)

    1. 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 特别地,我们希望可以就地完成转换操作.当转化完成以后,树中节点的左指 ...

最新文章

  1. c语言中不能表示的整型常量进制,C语言中整型常量的表示方法
  2. java怎么改变数据类型_java数据类型之间的转换,是怎么回事啊? - 收获啦
  3. 屏蔽敏感词的正则表达式
  4. 【转】C语言中DEFINE简介及多行宏定义
  5. 阿里开发者招聘节 | 2019阿里巴巴技术面试题分享:20位专家28道题
  6. 分享Silverlight/WPF/Windows Phone一周学习导读(06月13日-06月18日)
  7. python合并两个文本文件内容_利用python自带插件合并多个excle文件内容
  8. 数据库写入中文出现乱码的处理方式
  9. 零基础学python-零基础学习Python需要多久?多少钱?
  10. 机器学习笔记(1)决策树
  11. 苹果手机计算机怎么打分数,请问苹果手机计算器问题怎么处理的
  12. Github和Git是啥意思?下面来简单了解下。
  13. How to compile a node file?如何编译一个节点文件?
  14. 2016-2017-2 《Java程序设计》课程学生博客和代码托管链接
  15. 关于悬浮窗Settings.canDrawOverlays获取权限是否开通出错
  16. IntelliJ inspection gives “Cannot resolve symbol“ but still compiles code
  17. 史上最全的CSS基础知识大全!
  18. 水星怎么设置网速最快_水星mw300r怎么提高网速
  19. 项目:数据库表的梳理
  20. 【推荐】mysql联合 索引(复合索引)的探讨

热门文章

  1. 数据仓库与联机分析处理技术
  2. leetcode--207. 课程表
  3. 解题报告——习题2-5 分数化小数(decimal) 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。
  4. [leetcode] 746.使用最小花费爬楼梯
  5. Mysql剖析单条查询三种方法
  6. docker删除none镜像_Docker容器相关命令
  7. 现实生活中常用的动态路由—OSPF路由重分发
  8. 单臂路由与三层交换技术简单介绍
  9. 专科java程序设计试卷_java程序设计试卷(含答案)
  10. strstr函数_[LeetCode] 28. 实现strStr()