题目
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
思路1
1 利用二叉搜索树的定义,中序遍历的数组是有序,利用中序遍历把数组保存在ArrayList后。
2 直接返回第k小的元素。
import java.util.*;
public class Solution {
ArrayList<TreeNode> ans=new ArrayList();
TreeNode KthNode(TreeNode root, int k)
{
in_order(root);
if(k==0||k>ans.size())
return null;
return ans.get(k-1);
}
public void in_order(TreeNode root){
if(root==null) return ;
in_order(root.left);
ans.add(root);
in_order(root.right);
}
}
思路2
非递归中序遍历,若count==k 就返回节点
import java.util.*;
public class Solution {
ArrayList<TreeNode> ans=new ArrayList();
TreeNode KthNode(TreeNode root, int k)
{
in_order(root);
if(k==0||k>ans.size())
return null;
return ans.get(k-1);
}
public void in_order(TreeNode root){
if(root==null) return ;
in_order(root.left);
ans.add(root);
in_order(root.right);
}
}
其他的题题解
剑指offer题解 java版