1.前序遍历
/*
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
}
*/
vector<int> preorder(TreeNode* root){
if(root==NULL) return {};
stack<TreeNode*> s;
TreeNode* cur=root;
vector<int> res;
while(!s.empty()||cur!=NULL){
if(cur!=NULL){
res.push_back(cur->val);
s.push(cur);//先放根节点
cur = cur->left;
}
else{
cur = s.top();
cur = cur->right;
s.pop();
}
}
return res;
}
2.中序遍历
/**
* 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) {
if(root==NULL) return {};
stack<TreeNode*> s;
TreeNode* cur=root;
vector<int> res;
while(cur!=NULL||!s.empty()){
if(cur!=NULL){
s.push(cur);
cur=cur->left;
}
else{
cur = s.top();
s.pop();
res.push_back(cur->val);
cur=cur->right;
}
}
return res;
}
};
3.后序遍历
/**
* 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> postorderTraversal(TreeNode* root) {
if(root==NULL)return {};
stack<TreeNode*> s1;
stack<TreeNode*> s2;
TreeNode *cur = root;
vector<int> res;
while(!s1.empty()||cur!=NULL){
if(cur!=NULL){
s1.push(cur);
s2.push(cur);
cur = cur->right;
}
else{
cur = s1.top();
s1.pop();
cur = cur->left;
}
}
while(!s2.empty()){
res.push_back(s2.top()->val);
s2.pop();
}
return res;
}
};