一 题目
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 8 /\ 6 10 /\ /\ 5 7 9 11 中,按结点数值大小顺序第三个结点的值为4。
二 例子
输入二叉树如下:
如果输入该二叉树,以及整数3(第三个节点),则输出7
三 思路
要找出二叉搜索树的第k个节点,其实就是找出中序遍历的第k个节点,所以,只需要在中序遍历的时候添加一个变量,指示当前遍历到第几个节点即可
四 程序源码
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k)
{
if (pRoot == null || k<=0)
return null;
Stack<TreeNode> s = new Stack<>();
int i = 1;
while (pRoot!=null || !s.isEmpty()){
while (pRoot!=null){
s.push(pRoot);
pRoot = pRoot.left;
}
pRoot = s.pop();
if (i++ == k){
return pRoot;
}
pRoot = pRoot.right;
}
return null;
}
}