二叉树的前序遍历
创始人
2024-05-21 20:55:31

题目

144. 二叉树的前序遍历 - 力扣(LeetCode)

本章我们来探讨运用二叉树中所学的知识解决本题。对二叉树仍有疑问的小伙伴可以点击下方链接哦。

参考文献:(1条消息) 二叉树(三)_染柒_GRQ的博客-CSDN博客

原理

首先我们来回顾一下解题原理:遍历顺序为 根,左子树和右右子树。

解题

审题

由于力扣是接口型O(J)题,所以我们先来看一下接口的含义。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/

显然从这行代码可以看出,这是一个如图所示的链式结构。

链式结构

解题

根据经验我们应该先写扩容,原因很简单,由于这是链式结构,所以一定要开辟空间。

int* preorderTraversal(struct TreeNode* root, int* returnSize)
{int* a = (int*)malloc(sz * sizeof(int));return a;    
}

我们根据二叉树的实现可以再写一个计数函数。

int TreeSize(struct TreeNode* root)
{return root == NULL ? 0: TreeSize(root->left) + TreeSize(root->right) + 1;
}
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{int sz = TreeSize(root);//开辟空间int* a = (int*)malloc(sz * sizeof(int));return a;    
}

最后一步就是开始遍历。

原理:遍历顺序为 根,左子树和右右子树。

int TreeSize(struct TreeNode* root)
{return root == NULL ? 0: TreeSize(root->left) + TreeSize(root->right) + 1;
}void _preOrder(struct TreeNode* root, int* a, int* pi)
{if(root == NULL){return;}a[*pi] = root->val;++(*pi);_preOrder(root->left, a, pi);_preOrder(root->right, a, pi);
}int* preorderTraversal(struct TreeNode* root, int* returnSize){int sz = TreeSize(root);//开辟数组int* a = (int*)malloc(sz * sizeof(int));int* i = 0;_preOrder(root, a, &i);*returnSize = sz;return a;    
}

记住传值与传址的区别。

方法二

当然根据我们在二叉树中的套路,我们可以把 i 定义为全局变量,但是要注意细节,我在这里也绕了点弯。

int i =0;
int TreeSize(struct TreeNode* root)
{return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}void _preOrder(struct TreeNode* root, int* a)
{if(root == NULL){return;}a[i] = root->val;++(i);_preOrder(root->left, a);_preOrder(root->right, a);
}int* preorderTraversal(struct TreeNode* root, int* returnSize)
{i = 0;int size = 0;int sz = TreeSize(root);//开辟空间int* a = (int*)malloc(sz * sizeof(int));_preOrder(root, a);*returnSize = sz;return a;    
}

总结

本题其实在我们对二叉树有了一定了解以后做出来其实并不难,写不出来无非就是对代码的不熟练导致的,望小伙伴们勤加练习,更进一步!

欢迎大家点赞和评论!

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...