题目描述
分析
中序遍历,依然让用非递归法。本题比较简单,只要看懂后续遍历的写法,中序就迎刃而解了。
code
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res; //存放结果
stack<TreeNode*> s;
TreeNode* cur = root; //当前节点
while (cur) { //找到最左下角节点,途中所有节点(包括左下角)入栈
s.push(cur);
cur = cur->left;
}
//从栈顶元素开始
while (!s.empty()) {
cur = s.top();//出栈
s.pop();
res.push_back(cur->val); //访问当前节点
/*如果存在右子树,则访问右子树(按照同样的方式压栈,直到左下角为止)。 而左子树要么不存在,要么肯定已经访问过了,所以不用考虑*/
if (cur->right != NULL) {
cur = cur->right;
while (cur) {
s.push(cur);
cur = cur->left;
}
}
}
return res;
}
};