题目:给定一棵二叉搜索树,请找出其中的第k小的结点。
解析:二叉搜索树的左子树的结点小于根节点,右子树的结点大于根节点。左右子树同样的满足该条件。其实中序遍历二叉树就是按照从小到大的顺序输出。
①利用迭代对二叉搜索树进行中序遍历;
②定义变量k,每访问一个节点就将--k,直到k=0,此时将要访问第k小的结点;
TreeNode KthNode(TreeNode pRoot, int k){
Stack<TreeNode> stack = new Stack<TreeNode>();
//迭代中序遍历
while(!stack.isEmpty()||pRoot!= null){
while(pRoot!=null){
stack.push(pRoot);
pRoot = pRoot.left;
}
TreeNode node = stack.pop();
//每访问一个节点就将k-1,最终访问的就是第k小的结点
if (--k==0){
return node;
}
pRoot = node.right;
}
return null;
}