描述
给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。
- 返回第k小的节点值即可
- 不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1
- 保证n个节点的值不一样
数据范围: 0 ≤ n ≤ 1000, 0≤ k ≤ 1000,树上每个结点的值满足 0 ≤ val ≤ 1000
进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
如输入{5,3,7,2,4,6,8},3时,二叉树{5,3,7,2,4,6,8}如下图所示:
该二叉树所有节点按结点值升序排列后可得[2,3,4,5,6,7,8],所以第3个结点的结点值为4,故返回对应结点值为4的结点即可。
示例1
输入: {5,3,7,2,4,6,8},3
返回值:4
示例2
输入:{},1
返回值:-1
中序遍历
class Solution {
public:
int KthNode(TreeNode* proot, int k) {
// write code here
if(NULL == proot ){
return -1;
}
stack<TreeNode*> s;
int i =0;
while( !s.empty() || proot !=NULL ){
if( NULL!= proot){
s.push(proot);
proot = proot->left;
}else{
//已经左到底了
proot = s.top();//get top
s.pop();
//仅仅下面这4行是定制行为
i++;
if( k== i)
{return proot->val;
}
proot = proot->right;
}
}
return -1;
}
};
运行时间:6ms
超过11.35% 用C++提交的代码
占用内存:556KB
超过5.02%用C++提交的代码