题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
import java.util.ArrayList;
public class Solution {
ArrayList<TreeNode> al=new ArrayList<>();
TreeNode KthNode(TreeNode pRoot, int k){
if(pRoot==null||k<=0)return null;
middle(pRoot);
if(al.size()<k){
return null;
}
return al.get(k-1);
}
void middle(TreeNode pRoot){
if(pRoot==null)return;
middle(pRoot.left);
al.add(pRoot);
middle(pRoot.right);
return;
}
}
若要求不能有额外数组空间辅助
import java.util.ArrayList;
public class Solution {
TreeNode res=null;
boolean isReturn=false;
int num=0;
TreeNode KthNode(TreeNode pRoot, int k){
if(pRoot==null||k<=0)return null;
middle(pRoot,k);
return res;
}
void middle(TreeNode pRoot,int k){
if(pRoot==null)return;
if(!isReturn){
middle(pRoot.left,k);
}
num++;
if(k==num){
res=pRoot;
isReturn=true;
}
if(!isReturn){
middle(pRoot.right,k);
}
return;
}
}
也可以直接在本方法中作递归
import java.util.ArrayList;
public class Solution {
int sum=0;
TreeNode res=null;
boolean isReturn=false;
TreeNode KthNode(TreeNode pRoot, int k){
if(pRoot==null)return res;
if(!isReturn){
KthNode(pRoot.left,k);
}
sum++;
if(sum==k){
res=pRoot;
isReturn=true;
}
if(!isReturn){
KthNode(pRoot.right,k);
}
return res;
}
}