题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4
解法一:递归
```java
//递归
public class Solution {
int count=0;//记录遍历的结点数
TreeNode p=null;
TreeNode KthNode(TreeNode pRoot, int k){
if(pRoot==null||k<1) return null;
p=minNode(pRoot,k);
return p;
}
//找到最小结点的函数
TreeNode minNode(TreeNode pRoot, int k){
if(pRoot.left!=null) p=minNode(pRoot.left,k);
count++;
if(k==count) p= pRoot;
if(p==null&&pRoot.right!=null) p=minNode(pRoot.right,k);
return p;
}
}
解法二:中序遍历,时间比递归少
```java
//中序遍历结果就是从小到大的顺序
import java.util.*;
public class Solution {
ArrayList<TreeNode> list=new ArrayList<TreeNode>();
TreeNode KthNode(TreeNode pRoot, int k){
InSearch(pRoot);
if(list.size()>=k&&k>=1) return list.get(k-1);
return null;
}
//中序遍历
void InSearch(TreeNode pRoot){
if(pRoot!=null){
InSearch(pRoot.left);
list.add(pRoot);
InSearch(pRoot.right);
}
}
}