我是靠谱客的博主 友好母鸡,这篇文章主要介绍剑指Offer--Java--二叉搜索树的第k个结点,现在分享给大家,希望可以做个参考。

题目描述

给定一棵二叉搜索树,请找出其中的第k小的结点。

你可以假设树和k都存在,并且1≤k≤树的总结点数。

样例描述

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
输入: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; } * } */

思路

  1. 理清逻辑,第k小的结点实际上是结点单调增排序后的第k个。
  2. BST(二叉搜索树)的特点是中序遍历序列是单调增序列。因此直接递归进行中序遍历,设置计数器c,当增加到k时结点就是答案。
  3. dfs递归中要注意root!=null这个范围限制,不然会报空指针错误。

代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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--二叉搜索树内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部