题目描述

给定一棵二叉搜索树(对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值。),请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
思想:通过中序遍历,把值存入list中,然后取出第k-1个。

  1. import java.util.ArrayList;
  2. public class Solution {
  3. ArrayList<TreeNode> arr = new ArrayList<TreeNode>();
  4. TreeNode KthNode(TreeNode pRoot, int k)
  5. {
  6. middleOrder(pRoot);
  7. if(arr.size()<1||k<1||k>arr.size()) {
  8. return null;
  9. }
  10. return arr.get(k-1);
  11. }
  12. public void middleOrder(TreeNode pRoot) {
  13. if(pRoot!=null) {
  14. middleOrder(pRoot.left);
  15. arr.add(pRoot);
  16. middleOrder(pRoot.right);
  17. }
  18. }