/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
/*
如果当前的root没有左孩子,就把当前的栈顶元素出栈,判断是否num==K;是就把cur->val返回,没到K就把当前root右孩子入栈
while(stack不为空或者cur不为空节点)
*/
class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
stack<TreeNode*> s;
int num = 0;
TreeNode* cur = root;
while(!s.empty() || cur)
{
if(cur) //cur存在就把cur入到栈里面
{
s.push(cur);
cur = cur->left; //并且把cur的指向root的左孩子
}
else
{
cur = s.top(); //用cur记录栈顶元素
s.pop(); //把栈顶的元素pop掉
num++; //num记录的是是否到达了K
if(num == k)
return cur->val; //到达了K就把cur当前的值return
cur = cur->right; //没有到K且当前的root没有左孩子,就把cur指向当前root的右孩子
}
}
return 0;
}
};
lc230.二叉树中搜索第K小的元素
最新推荐文章于 2024-03-08 17:56:21 发布