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 }

 

posted @ 2025-09-19 10:34  congmingyige  阅读(5)  评论(0)    收藏  举报