JZ62 二叉搜索树的第k个结点
题目描述:
给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点
示例:
输入:
{5,3,7,2,4,6,8},3
返回值:
{4}
说明:
按结点数值大小顺序第三小结点的值为4
题解:
方法:中序遍历
1.思路:
因为二叉搜索树是有顺序的,左节点<根节点<右节点,所以按照二叉树的中序遍历就可以从大到小的遍历整棵树。
可以做一个flag,当找到第k个点后,就可以不用遍历之后的点了。
2.复杂度:
时间复杂度:O(n)
空间复杂度:O(1)
3.代码
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
int n=0;
TreeNode ans=null;
TreeNode KthNode(TreeNode pRoot, int k) {
InOrder(pRoot, k);
return ans;
}
void InOrder(TreeNode root, int k){
if(root==null)
return;
InOrder(root.left, k);
n++;
if(k==n){
ans=root;
}
if(k<n)
return;
InOrder(root.right, k);
}
}