题目描述:
首刷大部分自解: 维护一个栈
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> preorder;
preorderTraversal(root, preorder);
return preorder;
}
void preorderTraversal(TreeNode* root, vector<int>& preorder) {
if (root == nullptr)
return ;
preorder.push_back(root->val);
preorderTraversal(root->left,preorder);
preorderTraversal(root->right,preorder);
}
vector<int> preorderTraversal_iteration(TreeNode* root)
{
vector<int> preorder;
if (root == nullptr) return preorder;
stack<TreeNode*> sta;
TreeNode* node = root;
while (!sta.empty() || node != nullptr)
{
while (node != nullptr)
{
preorder.push_back(node->val);
sta.push(node);
node = node->left;
}
node = sta.top()->right;
sta.pop();
}
return preorder;
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> inorder;
inorderTraversal(root, inorder);
return inorder;
}
void inorderTraversal(TreeNode* root, vector<int>& inorder) {
if (root == nullptr)
return;
inorderTraversal(root->left, inorder);
inorder.push_back(root->val);
inorderTraversal(root->right, inorder);
}
vector<int> inorderTraversal_iteration(TreeNode* root)
{
vector<int> inorder;
if (root == nullptr) return inorder;
TreeNode* node = root;
stack<TreeNode*> sta;
while (!sta.empty() || node != nullptr)
{
while (node != nullptr)
{
sta.push(node);
node = node->left;
}
node = sta.top();
inorder.emplace_back(node->val);
node = sta.top()->right;
sta.pop();
}
return inorder;
}
vector<int> postorderTraversal_iteration(TreeNode* root) {
vector<int> postorder;
if (root == nullptr) return postorder;
stack<TreeNode*> sta;
TreeNode* node=root,*prev =nullptr;
while (!sta.empty() || node != nullptr)
{
while (node != nullptr)
{
sta.push(node);
node = node->left;
}
node = sta.top();
sta.pop();
if (node->right == nullptr || prev == node->right)
{
postorder.emplace_back(node->val);
prev = node;
node = nullptr;
}
else
{
sta.push(node);
node = node->right;
}
}
return postorder;
}
};