题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
import java.util.Stack;
/**
* 中序遍历寻找第k小的数
*
* @author 过路的守望
*
*/
public class InOrderTraversal {
/*
* 二叉树的中序遍历是从小到大的,可通过中序遍历来寻找第k小的节点。
*/
public TreeNode getKthNode(TreeNode pRoot, int k) {
if (pRoot == null || k <= 0) {
return null;
}
TreeNode cur = pRoot;
int p = 0;
Stack<TreeNode> stack = new Stack<TreeNode>();
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
p++;
if (p == k) {
return cur;
}
cur = cur.right;
}
return null;
}
private static class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
}