中序遍历
约 10 分钟
中序遍历把"喊名字"挪到了中间:先走完左子树,再访问根,最后走右子树。可以想成看戏——先看左边的演员,轮到主角登场时报出名字,再看右边的。它有一个很漂亮的性质,下一节就揭晓。
#include <iostream>
using namespace std;
struct Node { int val; Node* l; Node* r; };
void mid(Node* p) {
if (!p) return;
mid(p->l);
cout << p->val << " "; // 根在中间
mid(p->r);
}
int main() {
Node d{1,0,0}, e{3,0,0}, b{2,&d,&e}, c{5,0,0};
Node a{4,&b,&c};
mid(&a); // 输出:1 2 3 4 5
}
初学者常忘:递归里少写 if (!p) return;,或者把左右两次递归的位置写反,中间那一段顺序就全错了。
小纸条
把访问根的语句挪到中间,就是中序,试着写一写。
登录 后可看答案