Leetcode 230、二叉搜索树中第K小的元素
方法一、把二叉搜索树转换成有序数组(递归)
/**
1、转换成有序数组
*/
public int kthSmallest(TreeNode root, int k) {
List<Integer> list = new ArrayList<>();
inOrder(root, list);
return list.get(k - 1);
}
public void inOrder(TreeNode root, List<Integer> list) {
if(root == null) return;
inOrder(root.left, list);
list.add(root.val);
inOrder(root.right, list);
}
方法二、迭代(中序遍历的迭代法)
迭代的时候,每次弹出一个节点的时候,k–,当k = 0的时候,说明找到了第k小的节点,返回节点对应的值
public int kthSmallest(TreeNode root, int k) {
Deque<TreeNode> stack = new LinkedList<>();
while(!stack.isEmpty() || root != null) {
while(root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
k--;
if(k == 0) {
return root.val;
}
root = root.right;
}
return -1;
}