二叉树的迭代遍历指的是使用循环(迭代)的方法,而不是递归,来遍历二叉树的节点。迭代遍历通常需要使用辅助数据结构(如栈或队列)来帮助控制遍历的顺序。以下是几种常见的二叉树迭代遍历方法:
前序迭代遍历
leetocde144
class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> result;if (root != nullptr)st.push(root);while (!st.empty()) {TreeNode* node = st.top();st.pop();if (node->right)st.push(node->right);if (node->left)st.push(node->left);result.push_back(node->val);}return result;}
};
后序迭代遍历
class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> result;if (root == nullptr) return result;st.push(root);while(!st.empty()){TreeNode* node = st.top();st.pop();result.push_back(node->val);if(node->left) st.push(node->left);if(node->right) st.push(node->right);}//reverse(result.begin(),result.end());//reversestack<int> st1;for (int i = 0; i < result.size();i++){st1.push(result[i]);}for (int i = 0; i < result.size();i++){result[i] = st1.top();st1.pop();}return result;}
};
中序迭代遍历
leetcode94
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> st;TreeNode* node = root;while(node != nullptr || !st.empty()){if(node != nullptr){st.push(node);node = node->left;}else{node = st.top();st.pop();result.push_back(node->val);node = node->right;}}return result;}
};