题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
思路
1.根据二叉搜索树的特点(中序遍历是排序的结果)
2. 得到中序遍历的结果,找到 k-1 的位置
具体图解如下
具体实现代码如下
public class Solution {
// 用于保存结果
ArrayList<TreeNode> arr = new ArrayList<TreeNode>();
TreeNode KthNode(TreeNode pRoot, int k){
// 代码的鲁棒性
if(pRoot==null|| k==0){
return null;
}
// 中序遍历,保存结果
inOrder(pRoot);
TreeNode tr = pRoot;
// 倒数第k个结点 索引为 k-1(前提是k要满足中序遍历结点个数)
if(k<=arr.size()){
tr = arr.get(k-1);
}else{
return null;
}
return tr;
}
// 中序遍历
public void inOrder(TreeNode root){
if(root ==null){
return;
}
if(root.left != null){
inOrder(root.left);
}
arr.add(root);
if(root.right != null){
inOrder(root.right);
}
}
}
NowCoder(Online Coding, Please Click)