230.二叉搜索树中第K小的元素
题目描述:
给定一个二叉搜索树的根节点 root
,和一个整数 k
,请你设计一个算法查找其中第 k
小的元素(从 1 开始计数)。
做题思路:
因为题目给的是一棵二叉搜索树,又因为二叉搜索树的中序遍历序列是升序的,所以只需要中序遍历这棵二叉树,然后返回第k个节点即可。
代码
int kthSmallest(TreeNode* root, int k) {
stack<TreeNode*> s;
while(!s.empty() || root != nullptr){
while(root != nullptr){
s.push(root);
root = root->left;
}
root = s.top();
s.pop();
if(--k == 0)
break;
// 最开始写的时候在这里直接发回了最终结果,但是发现如果在这里直接return的话,
//while循环结束还需要加一个return,那个return的返回值不知道写什么好,就在这里break,在下面返回正确值
root = root -> right;
}
return root -> val;
}