要吐了要吐了,深更半夜太晚了就先不写思路了,直接上代码:
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; }
浙公网安备 33010602011771号