题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
思路:已知该树为一棵二叉搜索树,二叉搜索树的左节点值<根节点值<右结点值,题目中要找到第三小的结点,则可采用中序遍历的方式对该二叉树进行遍历,当查找到第k个结点时返回。注意k值不能小于等于0.
import java.util.List;
import java.util.ArrayList;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
List<TreeNode> a = new ArrayList<>();
TreeNode KthNode(TreeNode pRoot, int k)
{
//因该树为一棵二叉搜索树,利用中序遍历的方法来对树进行遍历
if(pRoot==null){
return null;
}
if(k<=0){
return null;
}
blTree(pRoot,a,k);
if(a.size()<k){
return null;
}
return a.get(k-1);
}
void blTree(TreeNode root,List list,int k){
if(root!=null){
blTree(root.left,list,k);
list.add(root);
blTree(root.right,list,k);
}
if(list.size()>=k){
return;
}
}
}