
剑指Offer--Java--二叉搜索树的第k个结点
发布日期:2021-05-04 06:37:22
浏览次数:23
分类:精选文章
本文共 862 字,大约阅读时间需要 2 分钟。
题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。
你可以假设树和k都存在,并且1≤k≤树的总结点数。
样例描述
输入:root = [2, 1, 3, null, null, null, null] ,k = 3 2 / \ 1 3输出:3/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */
思路
- 理清逻辑,第k小的结点实际上是结点单调增排序后的第k个。
- BST(二叉搜索树)的特点是中序遍历序列是单调增序列。因此直接递归进行中序遍历,设置计数器
c
,当增加到k
时结点就是答案。 - dfs递归中要注意
root!=null
这个范围限制,不然会报空指针错误。
代码
class Solution { TreeNode ans; //计数器,加到k时就是所要求的 int c=0; public TreeNode kthNode(TreeNode root, int k) { dfs(root,k); return ans; } //直接中序遍历即可,因为BST的中序遍历是单调增序列 void dfs(TreeNode root,int k){ if(root!=null){ dfs(root.left,k); c++; if(c==k) ans=new TreeNode(root.val); dfs(root.right,k); } return; }}
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月29日 05时34分14秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2019-03-05
Java求逆波兰表达式的结果(栈)
2019-03-05
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2019-03-05
SLAM学习笔记-求解视觉SLAM问题
2019-03-05
普歌-允异团队-HashMap面试题
2019-03-05
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
2019-03-05
程序员应该知道的97件事
2019-03-05
create-react-app路由的实现原理
2019-03-05
Linux环境变量配置错误导致命令不能使用(杂谈)
2019-03-05
openstack安装(九)网络服务的安装--控制节点
2019-03-05
shell编程(六)语言编码规范之(变量)
2019-03-05
vimscript学习笔记(二)预备知识
2019-03-05
Android数据库
2019-03-05
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2019-03-05
keil左侧文件调整方法
2019-03-05
STM8 GPIO模式
2019-03-05
omnet++
2019-03-05
23种设计模式一:单例模式
2019-03-05
Qt中的析构函数
2019-03-05