题目:
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
知识点:
二叉搜索树:左节点值<根节点值<右节点值
思路:
前序遍历,根据结点值的从小到大,将结点传入ArrayList<TreeNode>中,在ArrayList<TreeNode>中寻找第k个(下标是k-1)结点。
答案:
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot == null || k==0){return null;}
ArrayList<TreeNode> al = new ArrayList<>();
al = pre(pRoot,al);
if(k>al.size()){return null;}
return al.get(k-1);
}
public ArrayList<TreeNode> pre(TreeNode pRoot,ArrayList<TreeNode> al){
if(pRoot==null){return al;}
pre(pRoot.left,al);
if(pRoot!=null){al.add(pRoot);}
pre(pRoot.right,al);
return al;
}
}