概述
题目描述
给定一棵二叉搜索树,请找出其中的第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;
}
}
最后
以上就是友好母鸡为你收集整理的剑指Offer--Java--二叉搜索树的第k个结点的全部内容,希望文章能够帮你解决剑指Offer--Java--二叉搜索树的第k个结点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复