要吐了要吐了,深更半夜太晚了就先不写思路了,直接上代码:

vector<int> preorderTraversal(TreeNode *root, vector<int>path)
{
    stack<TreeNode*>TreeNodeStack;
    if(root==NULL)
        return path;
    TreeNode* pNode=root;
    TreeNodeStack.push(pNode);
    while(!TreeNodeStack.empty()){
        pNode=TreeNodeStack.top();
        path.push_back(pNode->val);
        TreeNodeStack.pop();
        if(pNode->right){
            TreeNodeStack.push(pNode->right);
        }
        if(pNode->left){
            TreeNodeStack.push(pNode->left);
        }
    }
};
vector<int> inorder(TreeNode* root, vector<int> path){
    stack<TreeNode*>TreeNodeStack;
    TreeNode* pNode=root;
    while(pNode||!TreeNodeStack.empty()){
        while(pNode){
            TreeNodeStack.push(pNode);
            pNode=pNode->left;
        }
        if(!TreeNodeStack.empty()){
            pNode=TreeNodeStack.top();
            TreeNodeStack.pop();
            path.push_back(pNode->val);
            pNode=p->right;
        }
    }
    return path;
}
vector
<int> postorderTravelsal(vector<int> path, TreeNode* root){ if(root==NULL){ return path; } TreeNode* pPrev=NULL; TreeNode* pNode=root; stack<TreeNode*>TreeNodeStack; while(pNode||!TreeNodeStack.empty()){ while(pNode){ TreeNodeStack.push(pNode); pNode=pNode->left; } pNode=TreeNodeStack.top(); if(pNode->right==NULL||pNode->right==pPrev){ path.push_back(pNode->val); pPrev=pNode; TreeNodeStack.pop(); pNode=NULL; } else{ pNode=pNode->right; } } return path; }