二叉树的前序遍历 - 力扣(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;
}
相关推荐
QuantumStack1 小时前
【C++ 真题】P1104 生日
开发语言·c++·算法
写个博客2 小时前
暑假算法日记第一天
算法
绿皮的猪猪侠2 小时前
算法笔记上机训练实战指南刷题
笔记·算法·pta·上机·浙大
hie988943 小时前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
杰克尼3 小时前
BM5 合并k个已排序的链表
数据结构·算法·链表
.30-06Springfield4 小时前
决策树(Decision tree)算法详解(ID3、C4.5、CART)
人工智能·python·算法·决策树·机器学习
我不是哆啦A梦4 小时前
破解风电运维“百模大战”困局,机械版ChatGPT诞生?
运维·人工智能·python·算法·chatgpt
xiaolang_8616_wjl4 小时前
c++文字游戏_闯关打怪
开发语言·数据结构·c++·算法·c++20
small_wh1te_coder4 小时前
硬件嵌入式学习路线大总结(一):C语言与linux。内功心法——从入门到精通,彻底打通你的任督二脉!
linux·c语言·汇编·嵌入式硬件·算法·c
hqxstudying4 小时前
Java创建型模式---单例模式
java·数据结构·设计模式·代码规范