以洛谷[P1305] 新二叉树为例
二叉树是什么东西,先序遍历是什么,这些网上都有,这里就不说了。数组实现也好做,但是复杂一点的用数组怕是要凉,用set啊map呀等STL容器怕是要慢。所以还是指针实现好。但是玩儿指针需要一定的语法基础,看周围大佬居然无一人会用指针建树。
先聊一聊指针。若已掌握,请略过此段。以int型为例。若建立指向某个变量的指针,操作如下:
int a = 0;
int* p = &a;
这个好理解。使用指针名的话用的是指向的地址,若引用指向的值需要对指针“解除引用”,即以*p的形式调用。虽然所谓“解除引用”,但实际上只是取一下值,并不是真的解除了。后面还能接着用。
这实际是创建int*型的指针p,规范些,星号应该在类型后,与指针名以空格隔开。实际上编译器并不区分这点。若建立两个指针,如下:
int a = 0, b = 0;
int* p = &a, * q = &b;
逗号后面要加星号的,否则编译器生成的是int型变量。若单独建立一个指针,则要为它动态分配内存,使用关键字new,如:
int* p = new int;
new后面int的含义其实是该类型的构造函数。关于构造函数我会另写文章介绍。所以,可以按通过构造函数为指针变量赋值,如:
int* p =