1.给定一个二叉树,返回它的 前序 遍历。
示例:
2.代码展示
/**
* 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().
*/
int treesize(struct TreeNode* root)
{
if (root == NULL)
{
return 0;
}
return treesize(root->left)+treesize(root->right)+1;
}
void _preorderTraversal(struct TreeNode* root,int* ret,int *returnSize)
{
if (root == NULL)
{
return ;
}
ret[(*returnSize)++]=root->val;
_preorderTraversal(root->left,ret,returnSize);
_preorderTraversal(root->right,ret,returnSize);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
int size = treesize(root);
int* ret = (int*)malloc(sizeof(int)*size);
*returnSize = 0;
_preorderTraversal(root,ret,returnSize);
return ret;
}
2.解题思路
首先遍历树的所有节点,求出节点数size,然后再动态开辟一个大小为size的数组,用于存放节点的val,然后通过遍历左右子树,如果val存在时,就把它储存在开辟的数组里,这里需要注意的是,存储的位置传值的时候要传指针,,最后返回数组的头指针即可。