問題描述
給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值爲4。
思路
二叉搜索樹的中序遍歷是有序序列。我們可以把二叉搜索樹的中序遍歷讀到一個arrayList, 直接返回對應的值。(方法一)
也可以進行中序遍歷,設置一個index, 如果index增長到k, 則返回。(方法二)
方法一
import java.util.*;
public class Solution {
ArrayList<TreeNode> mem = new ArrayList<>();
TreeNode KthNode(TreeNode pRoot, int k){
initMem(pRoot);
return 0<k && k<=mem.size()?mem.get(k-1):null;
}
private void initMem(TreeNode root){
if(root == null) return;
initMem(root.left);
mem.add(root);
initMem(root.right);
}
}
方法二
import java.util.*;
public class Solution {
int index;
int k;
TreeNode KthNode(TreeNode pRoot, int k){
this.k = k;
return initMem(pRoot);
}
private TreeNode initMem(TreeNode root){
if(root == null) return null;
TreeNode left = initMem(root.left);
if(left != null) return left;
if(++index == k) return root;
return initMem(root.right);
}
}