访问到一个结点后就将其右中左压入栈中,中就是其本身,也是父节点的左或者右儿子
由于访问的节点与要处理的节点不一定一致,所以在访问节点后加入null空节点来对访问节点做标记
此代码是中序遍历 改下顺序即可变成其他遍历
vector<int> orderTraversal(TreeNode* root) { stack<TreeNode*> s; vector<int> result; if(!root) return result; else s.push(root); while(!s.empty()){ TreeNode *curPtr = s.top(); if(curPtr){ s.pop(); /* 只需要改变他们的顺序即可决定是前序、后序还是中序 if(curPtr->right) s.push(curPtr->right); //右 s.push(curPtr); //中 s.push(nullptr); //中 if(curPtr->left) s.push(curPtr->left); //左 */ }else{ s.pop(); curPtr = s.top(); result.push_back(curPtr->val); s.pop(); } } return result; }