寻找二叉搜索树第k小的节点的值
思路:首先二叉搜索树的是所有右子树大于根节点,所有的左子树小于根节点。
对二叉搜索树进行中序遍历,即从小到大将数放到栈中,当放入的第k个时,就为第k小的元素
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
Stack<Integer> stack = new Stack<>();
int res;
boolean flag = false;
public int kthSmallest(TreeNode root, int k) {
if(root == null) return 0;
kthSmallest(root.left,k);
stack.push(root.val);
if(stack.size() == k){
if(!flag){
res = stack.pop();
}
flag = true;
}
if(!flag){
kthSmallest(root.right,k);
}
return res;
}
}