前序遍历非递归实现:
void preorderIterative(TreeNode* root) { if (root == nullptr) return; stack<TreeNode*> s; s.push(root); while (!s.empty()) { TreeNode* node = s.top(); s.pop(); cout << node->val << " "; if (node->right) s.push(node->right); if (node->left) s.push(node->left); } }
中序遍历非递归实现:
void inorderIterative(TreeNode* root) { stack<TreeNode*> s; TreeNode* curr = root; while (curr != nullptr || !s.empty()) { while (curr != nullptr) { s.push(curr); curr = curr->left; } curr = s.top(); s.pop(); cout << curr->val << " "; curr = curr->right; } }
后序遍历非递归实现:
void postorderIterative(TreeNode* root) { if (root == nullptr) return; stack<TreeNode*> s1, s2; s1.push(root); while (!s1.empty()) { TreeNode* node = s1.top(); s1.pop(); s2.push(node); if (node->left) s1.push(node->left); if (node->right) s1.push(node->right); } while (!s2.empty()) { cout << s2.top()->val << " "; s2.pop(); } }