题目描述
知识点
中序遍历迭代实现
结果
实现
码前思考
- 始终注意是先左后右的原则;
- 然后一点就是只要我们的根结点在栈中,我们的右子树的信息就没有丢失!
- 我们都是在根结点出栈的时候才放入右结点的,此前我们不放右结点。
代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
//记住:空树也是树,只不过要特判而已!
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
while(1){
while(root != NULL){
st.push(root);
root = root->left;
}
if(st.empty()){
break;
}else{
TreeNode* top = st.top();
res.push_back(top->val);
st.pop();
root = top->right;
}
}
return res;
}
};
码后反思
- 多动手模拟。。。