题解 | #实现二叉树先序,中序和后序遍历#
实现二叉树先序,中序和后序遍历
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;
}
};
阿里云工作强度 727人发布