题解 | #实现二叉树先序,中序和后序遍历#
实现二叉树先序,中序和后序遍历
http://www.nowcoder.com/practice/a9fec6c46a684ad5a3abd4e365a9d362
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 the root of binary tree * @return int整型vector<vector<>> */ vector<vector<int> > threeOrders(TreeNode* root) { // write code here vector<vector<int>> res; res.push_back(preorder(root)); res.push_back(inorder(root)); res.push_back(postorder(root)); return res; } vector<int> preorder(TreeNode* root) { if (!root) return {}; vector<int> res; stack<TreeNode*> s; s.push(root); while (!s.empty()) { TreeNode* node = s.top(); s.pop(); res.push_back(node->val); if (node->right) s.push(node->right); if (node->left) s.push(node->left); } return res; } vector<int> inorder(TreeNode* root) { if (!root) return {}; vector<int> res; stack<TreeNode*> s; TreeNode* cur = root; while (!s.empty() || cur) { while (cur) { s.push(cur); cur = cur->left; } cur = s.top(); s.pop(); res.push_back(cur->val); cur = cur->right; } return res; } //后序可以先按根右左的顺序便利,在翻转结果即可 vector<int> postorder(TreeNode* root) { if (!root) return {}; vector<int> res; stack<TreeNode*> s; s.push(root); while (!s.empty()) { TreeNode* node = s.top(); s.pop(); res.push_back(node->val); if (node->left) s.push(node->left); if (node->right) s.push(node->right); } // for (int i = 0, j = res.size() - 1; i < j; ) // swap(res[i++], res[j--]); reverse(res.begin(), res.end()); return res; } };