1.先序非递归
vector<int> preorderTraversal(TreeNode* root) {
if (root == nullptr) return{};
deque<TreeNode*> mq;
mq.push_front(root);
vector<int> nResult;
TreeNode *temp = nullptr;
while (mq.size() > 0)
{
temp = mq.front();
mq.pop_front();
nResult.push_back(temp->val);
if (temp->right)
mq.push_front(temp->right);
if (temp->left)
mq.push_front(temp->left);
}
return nResult;
}
2.中序非递归
stack<TreeNode*> mstack;
TreeNode *temp = root;
while(mstack.size() || temp)
{
while(temp){
mstack.push(temp);
temp = temp->left;
}
temp = mstack.top();
nResult.push_back(temp->val);
mstack.pop();
temp = temp->right;
}
3.后序非递归
vector<int> postorderTraversal(TreeNode* root) {
if (root == nullptr) return{};
stack<int> ss;
deque<TreeNode *> list;
list.push_front(root);
TreeNode * temp = nullptr;
while (list.size() > 0)
{
temp = list.front();
list.pop_front();
ss.push(temp->val);
if (temp->left)
list.push_front(temp->left);
if (temp->right)
list.push_front(temp->right);
}
vector<int> nResult;
while (ss.size() > 0)
{
nResult.push_back(ss.top());
ss.pop();
}
return nResult;
}