二叉树中序遍历
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
TreeNode* cur=root;
vector<int> res;
// res.push_back(cur->val);
stack<TreeNode*> st;
while(cur||!st.empty()){
if(cur){
st.push(cur);
cur=cur->left;
}else{
cur=st.top();
res.push_back(cur->val);
st.pop();
/* if(cur->right){
cur=cur->right;
}else{
cur=st.top();
}*/
cur=cur->right;
}
}
return res;
}
};
中序遍历 左 中 右 一直往左走,走到不能走后,就回溯
前序遍历:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
TreeNode* cur=root;
while(!st.empty()||!cur){
if(cur){
res.push_back(cur->val);
st.push(cur);
cur=cur->left;
}else{
st.pop(); //错误代码
cur=st.top()->right //
}
}
return res;
}
};
我脑中想的是这样:
前左右 ,很正常的思维
实际应该是这样:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
TreeNode* cur=root;
while(!st.empty()||!cur){
if(cur){
res.push_back(cur->val);
st.push(cur);
cur=cur->left;
}else{
if(!st.empty()){
cur=st.top()->right;
st.pop();
}
}
}
return res;
}
};