二叉树的前序遍历 - 力扣(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;
}
相关推荐
To_OC9 小时前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
刘马想放假21 小时前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
05Kevin1 天前
lk每日冒险题--数据结构6.27
算法
To_OC1 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安2 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法
七牛开发者2 天前
MCP 到底是什么?为什么 Agent 都想接上它
算法·aigc·agent
北域码匠2 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法