/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { private: vector<vector<int>> res; vector<int> ans; public: void PreOrder(TreeNode* root) { if (root == NULL) //递归终止条件 return; else { ans.push_back(root->val); PreOrder(root->left); PreOrder(root->right); } } void InOrder(TreeNode* root) { if (root == NULL) return; else { InOrder(root->left); ans.push_back(root->val); //cout << root->val;//自测输出,判断是否出错 InOrder(root->right); } } void PostOrder(TreeNode* root) { //ans.clear();//ans容器的清空,一定不能放在递归函数之内,否则会在每次递归时,将遍历后保存的数据清空,导致最后容器内空无一物。 if (root == NULL) return ; else { PostOrder(root->left); PostOrder(root->right); ans.push_back(root->val); //cout << root->val;/自测输出 } } vector<vector<int> > threeOrders(TreeNode* root) { // write code here if (root == NULL) return res; PreOrder(root); res.push_back(ans); ans.clear();//每次利用ans之前,需要将其清空,否则会将之前所得的循序保存 InOrder(root); res.push_back(ans); ans.clear(); PostOrder(root); res.push_back(ans); return res; } };