题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。
你可以假设树和k都存在,并且1≤k≤树的总结点数。
样例
输入:root = [2, 1, 3, null, null, null, null] ,k = 3
2
/ \
1 3
输出:3
问题分析
用迭代法进行二叉树的中序遍历,遍历到每个非空节点时都将计数加1,当计数值等于k时,返回当前节点的值。
代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* kthNode(TreeNode* root, int k) {
int count = 0;
stack<TreeNode*> s;
TreeNode* cur = root;
while(cur || !s.empty()){
while(cur){
s.push(cur);
cur = cur->left;
}
cur = s.top();
s.pop();
count++;
if(count == k)
return cur;
cur = cur->right;
}
return NULL;
}
};