对如下结构的树,执行 travel 函数,输出结果是 $1\ 2\ 3\ 4\ 5$。
1
/ \
2 3
/ \
4 5struct Node {
int val;
Node *left, *right;
Node(int v) : val(v), left(nullptr), right(nullptr) {}
};
void travel(Node* root) {
if (!root) return;
stack<Node*> s;
s.push(root);
while (!s.empty()) {
Node* cur = s.top(); s.pop();
cout << cur->val << " ";
if (cur->right) s.push(cur->right);
if (cur->left) s.push(cur->left);
}
}模拟程序执行过程,逐行跟踪变量变化,特别关注循环边界和递归终止条件。
模拟执行时注意:① 循环变量的起始和终止值;② 递归的边界条件;③ 数据类型转换和精度问题。
【考点】二叉树遍历|栈操作|遍历顺序
GESP 六级《数据结构与算法》模块,命题人专门卡住"栈的后进先出特性与树遍历顺序关系"这个认知盲区。六级前考生往往只记结论,看到树就写递归前序,却不会用栈模拟,遇到改入栈顺序的题就懵。