/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 the root of binary tree * @return int整型vector<vector<>> */ vector<int> pre; vector<int> mid; vector<int> post; vector<vector<int> > threeOrders(TreeNode* root) { if(root != nullptr){ preorder(root); midorder(root); postorder(root); } vector<vector<int>> res = {pre, mid, post}; return res; } void preorder(TreeNode* node){ //前序遍历:中左右;入栈右左,出栈即记录入数组并再入栈子节点; stack<TreeNode*> stk; stk.push(node); while(!stk.empty()){ TreeNode* temp = stk.top();stk.pop(); if(temp){ pre.push_back(temp->val); stk.push(temp->right); stk.push(temp->left); } } } void midorder(TreeNode* node){ //中序遍历 stack<TreeNode*> stk; //没有先入根节点 while(node || !stk.empty()){ //先把所有的左子节点压入栈中 while(node){ stk.push(node); node = node->left; } node = stk.top();stk.pop(); //到头了,就出最左边的,左右并压入其右节点 mid.push_back(node->val); node = node->right; } } void postorder(TreeNode* node){ //后序遍历:左右中; stack<TreeNode*> stk; stk.push(node); while(!stk.empty()){ TreeNode* temp = stk.top();stk.pop(); if(!temp)continue; post.push_back(temp->val); stk.push(temp->left); stk.push(temp->right); } reverse(post.begin(), post.end()); //入栈中,左右;最后进行反转; } };