C++ 栈利用 时间复杂度最大O(N)
从根节点开始入栈,出栈方向就是中序遍历。
/*
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 == nullptr || k == 0) return nullptr;
stack<TreeNode*> S;
int count = 0;
TreeNode* res = pRoot;
while(res != nullptr || !S.empty()) {
if(res != nullptr) {
S.push(res);
res = res->left;
} else {
res = S.top();
S.pop();
if(++count == k) return res;
res = res->right;
}
}
return nullptr;
}
};


京公网安备 11010502036488号