【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点

文章目录

  • 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
  • 一、中序遍历(提前返回)


一、中序遍历(提前返回)

二叉搜索树的中序遍历为递增序列

根据这个性质,易得二叉搜索树的中序遍历倒序为递减序列,因此,求 “二叉搜索树第 k 大的结点” 可转化为求 “此树的中序遍历倒序的第 k 个结点”

为了求第 k 个结点,需要实现以下三项工作:

  1. 递归遍历时计数,统计当前结点的序号
  2. 递归到第 k 个结点时,应记录结果 res
  3. 记录结果后,后续的遍历即失去意义,应提前终止

递归解析:

  1. 终止条件:当结点 root 为空(越过叶结点),则直接返回
  2. 递归右子树:即 dfs(root.right)
  3. 三项工作:
    1. 提前返回:若 k = 0,代表已找到目标结点,无需继续遍历,因此直接返回
    2. 统计序号:执行 k = k - 1
    3. 记录结果:若 k = 0,代表当前结点为第 k 大的结点,因此记录 res = root.val
  4. 递归左子树:即 dfs(root.left)
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {int res;int k;public int kthLargest(TreeNode root, int k) {this.k = k;dfs(root);return res;}void dfs(TreeNode root){if(root == null) return;dfs(root.right);if(k == 0) return;if(--k == 0) res = root.val;dfs(root.left);}
}

【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点相关推荐

  1. 剑指offer之二叉搜索树的第K个节点

    1 问题 给定一颗二叉搜索树,请找出其中的第k小的结点.例如, 5  3  7  2  4  6  8 中,按结点数值大小顺序第三个结点的值为4. 2 分析 二叉树定义:二叉查找树(Binary Se ...

  2. 剑指offer:二叉搜索树的第k个结点(中序遍历)

    1. 题目描述 /*给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. */ 2. 思路 中序遍历二叉搜索树,第K个就是结 ...

  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】 54. 二叉搜索树的第k大节点

    题目 给定一棵二叉搜索树,请找出其中第k大的节点. 我的解法:(中序遍历) /*** Definition for a binary tree node.* public class TreeNode ...

  6. 剑指offer之二叉搜索树的第K个结点

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 解题思路 二叉搜索树的中序遍历是顺序结构,利用中序遍历即可求 ...

  7. leetcode —— 面试题54. 二叉搜索树的第k大节点

    给定一棵二叉搜索树,请找出其中第k大的节点. 解法一:使用递归和中序遍历 # Definition for a binary tree node. # class TreeNode: # def __ ...

  8. 54. 二叉搜索树的第k大节点

    2020-06-22 1.题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 2.题解 中序遍历二叉搜索树即为升序的结果,将其存储在vector中,最后进行输出即可. 3.代码 /*** Defi ...

  9. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表

    [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...

最新文章

  1. webconfig.java_基于JavaConfig配置的Spring MVC的构建
  2. android 上传图片到服务器Tomcat(Struts2)
  3. WGS84经纬度坐标转北京54高斯投影地方坐标流程
  4. 嵌入式Linux系统编程学习之二常用命令
  5. 如何学好前端,这5点你一定要知道!
  6. 遍历点击事件(屏蔽同类名的其它点击事件,防止多次请求)
  7. java视频上传方法_java大视频上传实现
  8. 程序猿的中秋节——浪漫至死不渝!!
  9. STM32单片机基础知识总结(二)
  10. 能玩游戏的计算机推荐,电脑玩啥端游合适 适合长期玩的游戏有哪些
  11. 一款对程序员体验友好的浏览器翻译插件
  12. 计科生毕业一年,做了什么?
  13. 医学图像处理涉及到的窗宽窗位 1
  14. 2021-基于深度学习的人脸检测综述文献-摘要
  15. chrome tv版_软件推荐TV版APP:影迷大院1.0TV纯净版
  16. operation 04
  17. 蓝桥杯-分巧克力 【二分】
  18. C语言——字符串旋转问题
  19. 如何用python画爱心表白_程序员式优雅表白,教你用python代码画爱心
  20. 亚信安全虚拟手机服务器,亚信安全云手机服务器

热门文章

  1. c++去除图片上的文字_图片文字修改去除方法
  2. va_start、va_end、va_arg 实现可变长参数
  3. 史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~
  4. 远程桌面保存密码(凭据)的备份导出
  5. 是时候重构下自己的博客了
  6. html图片自动替换图片,十种图片替换文本CSS方法
  7. (224)FPGA数字信号处理入门指导
  8. (106)FPGA面试题-Verilog编写50MHz时钟激励
  9. (49)FPGA线性单驱动(wire型)
  10. RTT学习笔记5-线程间的通讯