二叉树的前序遍历 - 力扣(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;
}
相关推荐
JieE2128 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack2016 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树17 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2121 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2121 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫2 天前
Electron 系列文章封面图
算法·架构·前端框架