利用栈实现中序遍历,先遍历到左子树最深处并将路径节点入栈,弹出栈顶节点(根)记录值,再遍历其右子树,重复该过程直至所有节点处理完毕。
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> stk; // 存储遍历路径的节点
vector<int> ans; // 存储中序遍历结果
// 栈非空或当前节点非空,继续遍历
while(!stk.empty() || root != nullptr){
// 遍历到左子树最深处,沿途节点入栈
while(root != nullptr){
stk.push(root);
root = root->left;
}
// 弹出栈顶(根)
root = stk.top();
stk.pop();
ans.push_back(root->val); // 记录根节点值
root = root->right; // 遍历右子树
}
return ans;
}
};
时间复杂度: O(n) 空间复杂度: O(n)

京公网安备 11010502036488号