【C语言题解】 | 144. 二叉树的前序遍历

144. 二叉树的前序遍历

144. 二叉树的前序遍历

在这里插入图片描述

提示:

  1. 树中节点数目在范围 [0, 100] 内

函数原型:

int* preorderTraversal(struct TreeNode* root, int* returnSize) {
   

首先先观察一下这个函数原型,TreeNode* root 为形参,传入根节点,int* returnSize为形参,在函数调用时用于返回改题目所求数组的长度,因为由于C语言的局限,只能返回一个参数,所以采用这种通过传入指针的形参,来改变函数外部实参的方法。

题目要求给一个二叉树的根节点,返回其前序遍历的数组。

首先先计算二叉树的节点个数,用于后续的数组空间申请。

int TreeSize(struct TreeNode* root)
 {
   
     return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
 }

然后先序遍历,写入数组:

因为根据上述代码,求得节点个数为n,则该数组一共有n个空间,控制写入数组的下标需要传入int* ,因为若直接传入int,形参的改变不影响实参的改变。

void preorder (struct TreeNode* root, int* a,int* pi)
{
   
    if(root == NULL)
    return ;
    a[(*pi)++] = root->val;
    preorder(root->left,a,pi);
    preorder(root->right,a,pi);
}

使用malloc函数构建数组,返回数组。

int* preorderTraversal(struct TreeNode* root, int* returnSize) {
   
    int n = TreeSize(root);
    int* a = (int*)malloc(sizeof(int)*n);
    *returnSize = n;

    int* i = 0;
    preorder(root,a,&i);
    return a;
}

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
 int TreeSize(struct TreeNode* root)
 {
   
     return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
 }
void preorder (struct TreeNode* root, int* a,int* pi)
{
   
    if(root == NULL)
    return ;
    a[(*pi)++] = root->val;
    preorder(root->left,a,pi);
    preorder(root->right,a,pi);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
   
    int n = TreeSize(root);
    int* a = (int*)malloc(sizeof(int)*n);
    *returnSize = n;

    int* i = 0;
    preorder(root,a,&i);
    return a;
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-09 16:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-09 16:10:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-09 16:10:01       82 阅读
  4. Python语言-面向对象

    2024-01-09 16:10:01       91 阅读

热门阅读

  1. 【Python】卷积神经网络

    2024-01-09 16:10:01       61 阅读
  2. 【面试高频算法解析】算法练习7 贪心算法

    2024-01-09 16:10:01       62 阅读
  3. SpringBoot项目中开启MyBatis的SQL日志

    2024-01-09 16:10:01       55 阅读
  4. openc910源码LSU系列之<66>

    2024-01-09 16:10:01       50 阅读
  5. golang学习-流程控制

    2024-01-09 16:10:01       58 阅读
  6. pytest-mock 数据模拟

    2024-01-09 16:10:01       78 阅读
  7. 用 Socket.D 替代原生 WebSocket 做前端开发

    2024-01-09 16:10:01       65 阅读
  8. 常见连读技巧

    2024-01-09 16:10:01       75 阅读
  9. Linux CentOS官方文档之U盘安装

    2024-01-09 16:10:01       56 阅读
  10. ACP科普:为什么Scrum的冲刺周期不变?

    2024-01-09 16:10:01       55 阅读
  11. socket从客户端向主机传输一个文件

    2024-01-09 16:10:01       55 阅读
  12. Scrum产品负责人(CSPO)认证Scrum Product Owner

    2024-01-09 16:10:01       55 阅读