1.前序遍历
/**
* 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> preorderTraversal(TreeNode* root) {
vector<int> v;
stack<TreeNode*> st;
TreeNode* cur=root;
while(cur || !st.empty()){
//取左节点执行
while(cur){
v.push_back(cur->val);
st.push(cur);
cur=cur->left;
}
//取左节点的右子树
TreeNode* top=st.top();
st.pop();
cur=top->right;
}
return v;
}
};
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) {
vector<int> v;
stack<TreeNode*> st;
TreeNode* cur=root;
while(cur || !st.empty()){
//取左节点入栈
while(cur){
st.push(cur);
cur=cur->left;
}
//取出节点,访问节点的右子树
TreeNode* top=st.top();
st.pop();
v.push_back(top->val);
cur=top->right;
}
return v;
}
};
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) {
vector<int> v;
stack<TreeNode*> st;
TreeNode* cur=root;
TreeNode* last=NULL; //防止陷入死循环,避免数据进行二次判断
while(cur || !st.empty()){
//取左节点入栈
while(cur){
st.push(cur);
cur=cur->left;
}
//取左节点的右子树
TreeNode* top=st.top();
if(top->right==NULL || last==top->right){
v.push_back(top->val);
last=top;
st.pop();
}
else{
cur=top->right;
}
}
return v;
}
};