struct * 初始化和造数据的简洁方式(二叉树,d, *left, *right)(面试)
node* nod = new node{20, nullptr}; *nod = {20, nullptr};
1.
c++11之后推荐用nullptr
2.
写法
node* ptr1;
node* ptr2, *ptr3;
强调"node*"是一个整体类型(指向node的指针)
但是google风格,用
node *left, node *right
3.
node *nod[7];
此时数组中的每个指针元素都是未初始化的野指针,而不是 “空”(nullptr)
4.
node* nod[7]; 声明的是一个指针数组(数组元素是 node* 类型的指针),它不会执行 node 结构体的构造函数。
5.
nod[2] = new node(2, nod[4], nod[5]);
不能这样写,前面nod[1]已经使用了nod[2]这个节点,new node是新分配了一个空间
代码:
1 #include <iostream> 2 using namespace std; 3 4 struct node { 5 int d; 6 node *left, *right; 7 node() : d(0), left(nullptr), right(nullptr) {} 8 node(int d) : d(d), left(nullptr), right(nullptr) {} 9 node(int d, node *left, node *right) : d(d), left(left), right(right) {} 10 }; 11 12 void init() { 13 /* 14 1 2 15 1 3 16 2 4 17 2 5 18 3 6 19 */ 20 node *nod[7]; 21 for (int i = 0; i < 7; i++) { 22 nod[i] = new node(i); 23 } 24 *nod[1] = {1, nod[2], nod[3]}; 25 *nod[2] = {2, nod[4], nod[5]}; 26 *nod[3] = {3, nod[6], nullptr}; 27 } 28 29 int main() { 30 init(); 31 return 0; 32 }
1 #include <iostream> 2 using namespace std; 3 4 struct node { 5 int d; 6 node *left, *right; 7 node() : d(0), left(nullptr), right(nullptr) {} 8 node(int d) : d(d), left(nullptr), right(nullptr) {} 9 node(int d, node *left, node *right) : d(d), left(left), right(right) {} 10 }; 11 12 void init() { 13 /* 14 1 2 15 1 3 16 2 4 17 2 5 18 3 6 19 */ 20 node *nod[7]; 21 for (int i = 0; i < 7; i++) { 22 nod[i] = new node(i); 23 } 24 nod[3] = new node(3, nod[6], nullptr); 25 nod[2] = new node(2, nod[4], nod[5]); 26 nod[1] = new node(1, nod[2], nod[3]); 27 } 28 29 int main() { 30 init(); 31 return 0; 32 }

浙公网安备 33010602011771号