简单一道题,卡了有些天,发现是有些忘记了的指针知识,特意回顾一手,假如是有
int a 这个整形,要想在函数中改变他则需要,往函数里传a的地址,这个我是知道的,但是我忘记了,在递归函数中要改变a实际上传i就行,那么二级指针也是相同的意思,如果是要改变指针i那么是需要传i的地址。
#include"stdio.h" void zhongxu(int*i){ (*i)++; printf("%d\n", *i); } int main () { int a=1; zhongxu(&a); printf("%d",a); return 0; } 输出的两个都是2
首先本题有个潜在的难点就是如果要具体的算树节点,来具体的申请内存,就要用到这个函数
int size(struct TreeNode*root){ return root==NULL?0:size(root->left)+size(root->right)+1 }
如果root为空,就返回0,否则就计算总共的节点从左树开始递归。
void zhongxu(struct TreeNode*root,int*a,int *i){ if(root==NULL) return; zhongxu(root->left,a,i); a[*i]=root->val; (*i)++; zhongxu(root->right,a,i); } int* inorderTraversal(struct TreeNode* root, int* returnSize){ int i=0; int*a=malloc(sizeof(int)*101); zhongxu(root,a,&i); *returnSize=i; return a; }
输出的时候,多个数字,但是函数只能返回一个值,所以需要返回数组。开始往数组里面存树里面的值,然后让i++赋给下一个值
返回数组也是返回他的首地址,returnSize是要取出数组有多少个,从而取出完整的数组。
然后一个注意点 *p++
是先++后*,也就相当于*(p++)假如数组是{1,3,5,7,9)
p就会变成3,也就是下一个元素。但是输出时printf("%d", *p++); 输出会输出1
(*p)++。 先*再+1,所以p会变成2,同时他的printf("%d",(*p)++);输出也是输出1