题解 | #二叉搜索树的第k个结点#
二叉搜索树的第k个结点
http://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
//给一颗二叉搜索树,找出其中第k小的节点
//先排序,再找数。使用中序遍历即可排好序。
import java.util.*;
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k) {
//先判断输入条件
if(pRoot == null || k<=0){
return null;
}
//使用栈进行中序遍历
Stack<TreeNode> stack = new Stack<>();
//定义一个指针,指向当前节点
TreeNode cur = pRoot;
//开始中序遍历
while(!stack.isEmpty() || cur != null){
if(cur!= null){
//先把左边的都放入栈,后面还有其他处理
stack.push(cur);
cur = cur.left;
}else{
//左边都拿到了,就逐个开始判断有没有右孩子,有就加入遍历
cur = stack.pop();
if(--k == 0)
return cur;
cur = cur.right;
}
}
return null;
}
}