二叉树前序遍历(根-左-右),必须用迭代非递归实现。
class Solution {
public:
vector preorderTraversal(TreeNode* root) {
if (!root) return {};
vector res;
stack st;
st.push(root);
while (!st.empty()) {
TreeNode* node = st.top(); st.pop();
res.push_back(node->val);
if (node->right) st.push(node->right);
if (node->left) st.push(node->left);
}
return res;
}
};
vectorpreorderTraversal(TreeNode* root) { vector res; stack > st; // 0=未访问, 1=已访问 if (root) st.emplace(root, 0); while (!st.empty()) { auto [node, state] = st.top(); st.pop(); if (!node) continue; if (state) res.push_back(node->val); else { if (node->right) st.emplace(node->right, 0); if (node->left) st.emplace(node->left, 0); st.emplace(node, 1); } } return res; }
该框架易扩展为中序/后序(调整入栈顺序与标记时机)。