leetcode102题,二叉树的层次遍历
楼主太难了,指针傻傻分不清,不单独写一篇不足以泄愤!!
一、功能函数的输出
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
/* A、返回一个int ** ,理解是一个二维数组,步骤如下:*/
1、申请一维指针空间,用来存行号
int ** res = (int ** )malloc(sizeof(int *) * row);
2、给每一个行号申请空间(如果列数均匀可以批量申请,此题目我选了按需申请)。
res[i] = (int *) malloc(sizeof(int) * column);
3、可以直接进行赋值操作了
res[i][j] = tmp->val;
/* B、如果入参是int *,理解returnSize是一个变量的指针,赋值方法如下:*/
对地址直接赋值
* returnSize = gets_tree_row(root);
/* C、如果入参是int,理解returnColumnSize是一个数组的指针的指针,赋值方法如下:*/
1、申请一个一维变量的空间。
2、把returnColumnSize取地址赋值过去
*returnColumnSizes = (int*)malloc(sizeof(int) * row);
3、对一维空间的赋值操作如下
(*returnColumnSizes)[i] = column;
批量申请方法(注意:对指针做加减是自动乘了元素大小的):
char ***result;
char **ret;
void Initial(int** returnColumnSizes, int strsSize){
int i;
result = (char***)malloc(sizeof(char**) * strsSize);
ret = (char**)malloc(sizeof(char*) * strsSize * strsSize);
for (i = 0; i < strsSize; i++) {
result[i] = ret + strsSize * i; //非常重要,此处是strSize*i,而不是strSize*i*sizeof(char*)
}
*returnColumnSizes = (int*)malloc(sizeof(int) * strsSize);
memset(*returnColumnSizes, 0, sizeof(int) * strsSize);
}
二、int型 二维数组 Main函数构造
main函数构造的时候,很多不会的。
1、二维指针,可以用int *a[4]来存放,把a作为入参。
2、把一个指针n取地址,作为二维指针的入参。
可以看如下代码的运行结果:
aa是一个二维数组的指针
a是一个指针数组
三、char型 二维数组 Main函数构造