问题描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
思路解析
二叉搜索树的中序遍历结果是有序的,所以直接中序遍历,然后输出第k个结果就好了。
代码
public class KthNode {
ArrayList<TreeNode> TraversalRes = new ArrayList<>();
TreeNode KthNode(TreeNode pRoot, int k){
midOrderTraversal(pRoot);
if(k>TraversalRes.size() || k<1) return null;
return TraversalRes.get(k-1);
}
void midOrderTraversal(TreeNode root){
if(root==null) return;
midOrderTraversal(root.left);
TraversalRes.add(root);
midOrderTraversal(root.right);
}
}