建立树时为什么要用二级指针,遍历不用
时间: 2023-07-15 08:14:33 浏览: 45
在建立树的过程中,我们需要通过指针来建立树的结构。由于每个节点都有一个左右子节点,如果我们只使用一级指针,则每次建立子节点时需要判断左右子节点是否为空,从而在堆上分配空间并将新节点连接到对应的父节点上。
这种方式虽然可行,但是比较繁琐,而且容易出错。因此,我们通常会使用二级指针,这样就可以直接修改指针的值,而不需要通过父节点来判断。例如,在向一个二叉搜索树中插入一个节点时,我们可以通过传递指向当前节点指针的二级指针,递归地查找插入位置,并将新节点连接到指向当前节点的指针上。这样的代码相对简洁,也更加易于理解和调试。
遍历树时,我们不需要修改节点的指针,因此使用一级指针就足够了。遍历树的过程中,我们只需要将指针指向下一个节点即可。因此,使用一级指针可以减少内存消耗,并且提高代码的效率。
相关问题
单向链表为什么要用二级指针
二级指针可以让我们在链表的头部进行插入和删除操作,而不需要遍历整个链表。如果我们只使用一级指针,那么在头部进行插入和删除操作时,我们需要遍历整个链表找到头节点,这样会浪费很多时间。因此,使用二级指针可以提高链表的插入和删除效率。
指针遍历二维数组都有什么方式
指针遍历二维数组的方式有以下几种:
1. 通过双重循环遍历数组元素
```
int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
```
2. 通过指针遍历数组元素
```
int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int *p = &arr[0][0];
for (int i = 0; i < 3 * 4; i++) {
printf("%d ", *(p + i));
if ((i + 1) % 4 == 0) {
printf("\n");
}
}
```
3. 通过指针数组遍历数组元素
```
int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int *p[3];
for (int i = 0; i < 3; i++) {
p[i] = arr[i];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", *(p[i] + j));
}
printf("\n");
}
```
以上三种方式都可以遍历二维数组的所有元素,选择哪一种方式取决于实际需求和编程习惯。