给定一个二叉搜索树,编写一个函数
kthSmallest
来查找其中第 k 个最小的元素。说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
思路:中序遍历一个树,有序弹出节点, 同时k--,当k为0时,即为第k小的元素,直接返回当前节点。
//非递归中序
public int kthSmallest(TreeNode root, int k) {
TreeNode t = travelTree(root,k);
return t.val;
}
public TreeNode travelTree(TreeNode node,int k){
TreeNode tNode = node;
Stack<TreeNode> s = new Stack<>();
while(!s.isEmpty()||tNode!=null){
while(tNode!=null){
s.push(tNode);
tNode = tNode.left;
}
tNode = s.pop();
System.out.println(tNode.val);
k--;
if(k==0){return tNode;}
tNode=tNode.right;
}
return null;
}