阅读以下二叉树的深度优先搜索算法,横线上应填写( )。
void dfs(TreeNode* root) {
if (root == nullptr)
return;
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
________________________ // 在此处填入代码
cout << node->value << " ";
if (node->right) s.push(node->right);
if (node->left) s.push(node->left);
}
}排列组合问题:先判断是否考虑顺序(排列P vs 组合C),再确定是否允许重复。乘法原理分步,加法原理分类。
区分排列(考虑顺序,$P(n,m)$)和组合(不考虑顺序,$C(n,m)$)。注意特殊元素优先处理、正难则反等计数技巧。
【考点】栈操作|迭代 DFS|语法规范
本题出自 GESP 六级 C++ 算法模块,核心考查栈(stack)的基本操作与二叉树深度优先遍历的迭代实现。六级卷中此类题占比约 12%,卡住 60% 以上考生——不是 DFS 原理不懂,而是栈的接口记忆模糊,把 top 和 pop 当成无谓的组合,或者把 stack 和 queue 的 front 记混。