剑指offer 062、二叉搜索树的第k个结点
题目
题解
首先想到的是递归
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k) {
if (!pRoot) return nullptr;
TreeNode* result = KthNode(pRoot->left, k);
if (count >= k) return result;
if (++count == k) return pRoot;
return KthNode(pRoot->right, k);
}
private:
int count = 0;
};
借助栈来寻找,这种解法还是不太理解
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k) {
if (!pRoot) return nullptr;
stack<TreeNode*> res;
TreeNode* p = pRoot;
while (!res.empty() || p) {
while (p) {
res.push(p);
p = p->left;
}
TreeNode* node = res.top();
res.pop();
if (--k == 0) // 计数器
return node;
p = node->right;
}
return nullptr;
}
};