前序遍历:
vector<int> preorderTraversal(TreeNode* root) {
vector<int>result;
stack<TreeNode*>st;
if(root==NULL)
{
return result;
}
st.push(root);
while(!st.empty())
{
TreeNode* node=st.top();
result.push_back(node->val);
st.pop();
if(node->right!=NULL)
{
st.push(node->right);
}
if(node->left!=NULL)
{
st.push(node->left);
}
}
return result;
}
中序遍历:
vector<int> inorderTraversal(TreeNode* root) {
vector<int>result;
stack<TreeNode*>st;
TreeNode* node=root;
while(node!=NULL||!st.empty())
{
if(node!=NULL)
{
st.push(node);
node=node->left;
}
else{
node=st.top();
st.pop();
result.push_back(node->val);
node=node->right;
}
}
return result;
}
后序遍历:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*>st;
if(root==NULL)
{
return result;
}
TreeNode* prev=NULL;
while(root!=NULL||!st.empty())
{
while(root!=NULL)
{
st.push(root);
root=root->left;
}
root=st.top();
if(root->right==NULL||prev==root->right)
{
result.push_back(root->val);
st.pop();
prev=root;
root=NULL;
}
else
{
root=root->right;
}
}
return result;
}