题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。
题目分析
模板题,二叉搜索树,通过中序遍历即可得到一个非递减序列,在遍历的过程中使用一个count变量来标识当前已经过遍历的结点数目,当count等于k时,表示已经找到第k小的结点,即可返回。
代码
import java
.util
.*
;
public class Solution {
TreeNode
KthNode(TreeNode pRoot
, int k
)
{
if(pRoot
== null
){
return null
;
}
if(k
<= 0){
return null
;
}
Stack
<TreeNode> stack
= new Stack<>();
int count
= 0;
while(pRoot
!= null
|| !stack
.empty()){
if(pRoot
!= null
){
stack
.push(pRoot
);
pRoot
= pRoot
.left
;
}else{
pRoot
= stack
.pop();
count
++;
if(count
== k
){
return pRoot
;
}
pRoot
= pRoot
.right
;
}
}
return null
;
}
}