题目描述:
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
思路解析:
- 二叉树的中序遍历,从小到大输出结点
- 用栈来存储结点,并且计数。
- 循环条件:结点不为空,栈不为空
- 结点不为空就入栈,否则就出栈,遍历到第k结点就要跳出循环
代码:
import java.util.Stack;
/*
public 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;
int index = 0;
TreeNode kthNode = null;
TreeNode node = pRoot;
Stack<TreeNode> stack = new Stack<TreeNode>();
while(node!=null||!stack.isEmpty()){
if(node!=null){
stack.push(node);
node = node.left;
}else{
node = stack.pop();
index++;
if(index==k){
kthNode = node;
break;
}
node = node.right;
}
}
return kthNode;
}
}