- 题目:
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
- 思路:这题难度较低,二叉搜索树,左子树的值小于根,根的值小于右子树的值。那么中序遍历的话,结点输出是左根右的顺序,刚好是从小到大的顺序,找出第k个就行了。同时为了省时,找结点时,超过k了,可停止,没必要往后找了。
- 代码:
class Solution {
int index=0;
TreeNode result=null;
TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot==null) return null;
if(index<k) KthNode(pRoot.left,k);//往左找,这里的if判断条件应该是可以省略的,因为左子树的值都比根的值小,我们找第k小的数,k前面的数都得遍历下,但k后面的数就没必要了。且一定是左边找了,才右index++,index>k只出现在右序遍历的时候
index++;
if(index==k) result=pRoot;
if(index<k) KthNode(pRoot.right,k);//这里可以加个k的判断,因为找到第k个值后,就不需要再找右子树里比它大的数了。
return result;
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}