个人注释
法一:
/**
* Definition for a Node.
* struct Node {
* int val;
* int numChildren;
* struct Node** children; //二维指针,此处用于创建指向孩子结点的 结构体 指针数组
* };
*/
/**
*Note: The returned array must be malloced, assume caller calls free().
*/
#define MAX_NODE_SIZE 10000
void helper(const struct Node* root, int* res, int* pos) { //关键字const 表示只读,即带有const的数据类型不可修改
if (NULL == root) { //宏定义NULL 位于<stddef.h>头文件
return;
}
for (int i = 0; i < root->numChildren; i++) {
helper(root->children[i], res, pos); //递归
}
res[(*pos)++] = root->val; //后序遍历位于此处,若前序遍历 则与上面for语句调换位置
}
int* postorder(struct Node* root, int* returnSize) {
int* res = (int*)malloc(sizeof(int) * MAX_NODE_SIZE);
int pos = 0; //记录res数组存储了几个值...
helper(root, res, &pos);
*returnSize = pos; //题目未说明,这是自己要修改的值,即返回数组的长度
return res;
}
//姿势点
//*1)二维数组作用:1.创建指针数组 数组中每个指针可指向结构体,以此来形成 结构体数组
// 2.函数外部指针在函数内修改,则需二维指针为引子
//*2)NULL的宏定义在<stddef.h>头文件内
法二:
法三:
法四:
作者:力扣官方题解
链接:https ://leetcode.cn/problems/n-ary-tree-postorder-traversal/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。