二叉树的前序遍历 - 力扣(LeetCode)C语言

144. 二叉树的前序遍历 - 力扣(LeetCode)(点击前面链接即可查看题目)

一、题目

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

示例 1:

复制代码
输入:root = [1,null,2,3]
输出:[1,2,3]

示例 2:

复制代码
输入:root = []
输出:[]

示例 3:

复制代码
输入:root = [1]
输出:[1]

示例 4:

复制代码
输入:root = [1,2]
输出:[1,2]

示例 5:

复制代码
输入:root = [1,null,2]
输出:[1,2]

提示:

  • 树中节点数目在范围 [0, 100]
  • -100 <= Node.val <= 100

**进阶:**递归算法很简单,你可以通过迭代算法完成吗?

二、解题思路以及代码

注:

1.本题中returnSize,指的是二叉树的结点数

2.返回的数组必须是malloc开辟的

解题思路:

1. 本题要想控制数组的下标要传入下标i的地址,而不可以直接传入i的数值

2. 不能在递归函数内创建下标i,

复制代码
/**
 * 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().
 */
void prevBTree(int* pa, struct TreeNode* root,int* pi)
{
    if(NULL == root)
    {
        return;
    }
    pa[*pi] = root->val;
    (*pi)++;
    prevBTree(pa, root->left, pi);
    prevBTree(pa, root->right, pi);
}
int TreeSize1(struct TreeNode* root)
{
    return root == NULL? 0:TreeSize1(root->left) + TreeSize1(root->right) + 1;
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) 
{
    *returnSize= TreeSize1(root);
    int* a = (int*)malloc(*returnSize * sizeof(int));
    int i = 0;
    prevBTree(a,root,&i);
    return a;
}
相关推荐
Database_Cool_11 分钟前
实时计数器/排行榜首选:阿里云 Tair 高并发数据结构实践
数据结构·数据库·阿里云·云计算
ShallWeL24 分钟前
【机器学习】(16)—— 数值数据
人工智能·python·算法·机器学习·数据分析
hongyucai1 小时前
详解rlinf强化学习四步曲
人工智能·python·算法·架构
变量未定义~1 小时前
ST表-龙骑士军团【算法赛】
数据结构·算法
Yang_jie_031 小时前
笔记:数据结构(循环队列相关判断条件)
数据结构·笔记
小帽子_1231 小时前
储能 SOC/SOH 精准估算技术:储能工况下算法优化与误差修正方案
算法
hhlongg1 小时前
FFT分析
算法
水龙吟啸2 小时前
华为2026.6.17机考选择题+编程题【速刷敲黑板】
人工智能·深度学习·算法·华为
凌波粒2 小时前
LeetCode--53. 最大子序和(贪心算法)
算法·leetcode·贪心算法