Leetcode 144 二叉树先序遍历
int* resSize 与 int resSize[] 可以看作等价,那么在 res[(*resSize)++] = root->val; 中为什么数组又嵌了一个数组,这句应该怎么理解?
还有为什么他要一个returnSize表示长度?
谢谢!
res
是存储结果的数组,而 resSize
是用来表示结果数组的长度的变量。resSize
在这里是一个指向整数的指针,因为我们需要在递归的过程中不断更新结果数组的长度。(*resSize)++
的作用是将当前节点的值存入结果数组中,并且将 resSize
的值加一,表示数组长度增加了一个元素。int resSize
而要用指针形式 int* resSize
。这是因为在递归的过程中,我们需要在不同的层级上共享同一个变量,以便能够正确地更新结果数组的长度。如果使用普通的 int
变量,每次递归调用时都会创建一个新的局部变量,无法在不同层级之间共享值。returnSize
,它是一个指向整数的指针,用来表示结果数组的长度。在 preorderTraversal
函数中,我们通过 *returnSize = 0
初始化结果数组的长度为 0。然后,在 preorder
函数中,每次将节点的值存入结果数组后,都会通过 (*resSize)++
更新 returnSize
的值,最终得到结果数组的正确长度。你这里的res[(*resSize)++] = root->val:
res数组保持的是节点的value,二叉树的大小我们不知道的,只能用动态分配来存储value
returnSize 因为要返回存储在 res 数组中的节点数