二叉树OJ题:LeetCode--144.二叉树的前序遍历

这篇具有很好参考价值的文章主要介绍了二叉树OJ题:LeetCode--144.二叉树的前序遍历。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第144道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

数据结构与算法专栏:数据结构与算法

个  人  主  页 :stackY、

C 语 言 专 栏C语言:从入门到精通

二叉树OJ题:LeetCode--144.二叉树的前序遍历,Leetcode刷题训练营,leetcode,算法,c语言,二叉树

 LeetCode--144.二叉树的前序遍历:https://leetcode.cn/problems/binary-tree-preorder-traversal/

目录

1.题目介绍

2.实例演示

3.解题思路

#二叉树结点个数 

#将二叉树结点的值保存在数组中 

完整代码:


1.题目介绍

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

二叉树OJ题:LeetCode--144.二叉树的前序遍历,Leetcode刷题训练营,leetcode,算法,c语言,二叉树

2.实例演示

二叉树OJ题:LeetCode--144.二叉树的前序遍历,Leetcode刷题训练营,leetcode,算法,c语言,二叉树

3.解题思路

本道题的意思要将前序遍历的结果储存在一个数组中,而这个数组需要动态开辟,那么这里就牵扯到数组开多大的空间?要想知道数组开多大的空间那么就需要知道二叉树有多少个结点,因此我们首先要求出二叉树的结点个数。

#二叉树结点个数 

关于如何求二叉树的结点的个数在这篇博文中有过介绍:二叉树的链式结构

求二叉树结点个数的主要思想:左右子树结点个数 + 1

代码演示:

/**
 * 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().
 */


//计算二叉树的结点个数
//节点个数 = 左右子树节点个数 + 1(根节点)
int BTreeSize(struct TreeNode* root)
{
    if(root == NULL)
    {
        return 0;
    }
    return BTreeSize(root->left) 
         + BTreeSize(root->right) + 1;
}

int* preorderTraversal(struct TreeNode* root, int* returnSize){
 
    *returnSize = BTreeSize(root);
    //创建数组
    //......
}

#将二叉树结点的值保存在数组中 

先对二叉树进行前序遍历:根节点、左子树、右子树,然后将根节点的值保存在数组中,再进行左右子树的递归,这里要注意的是:需要从外部传进来一个下标的指针,如果在函数内部设置下标,那么每一次函数递归调用就会创建新的下标,这样子只能保存第一个结点,如果从外部传的是地址,那么每一次函数递归调用就会去访问这块地址,这样就确保了不会重复保存。

完整代码:

/**
 * 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().
 */


//计算二叉树的结点个数
//节点个数 = 左右子树节点个数 + 1(根节点)
int BTreeSize(struct TreeNode* root)
{
    if(root == NULL)
    {
        return 0;
    }
    return BTreeSize(root->left) 
         + BTreeSize(root->right) + 1;
}

//前序遍历
//将前序遍历的结果保存在一个数组里面
void _preorderTraversal(struct TreeNode* root, int* pa, int* pi)
{
    //判断是否为空树
    if(root == NULL)
        return;
    //若不为空则将根节点保存至数组中
    pa[*pi] = root->val;
    (*pi)++;

    //继续递归遍历它的左右子树
    _preorderTraversal(root->left, pa, pi);
    _preorderTraversal(root->right, pa, pi);
}


int* preorderTraversal(struct TreeNode* root, int* returnSize){
    *returnSize = BTreeSize(root);
    //创建数组
    //根据二叉树的结点个数来创建数组的大小
    int* a = (int*)malloc(sizeof(int) * (*returnSize));
    //创建数组下标
    int i = 0;
    _preorderTraversal(root, a, &i);
    //返回前序遍历结果
    return a;
}

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持! 文章来源地址https://www.toymoban.com/news/detail-539806.html

到了这里,关于二叉树OJ题:LeetCode--144.二叉树的前序遍历的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包