一、题目描述
给定一个二叉树,返回它的 前序 遍历。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、代码具体实现及思路
/**
* 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().
*/
#define MAX 1024
void preorder(struct TreeNode* root, int *arr, int *index){
//先看根节点是否存在
if(!root){
return;
}
//若根节点存在,则先将根节点的val存入arr数组中
arr[*index] = root->val;
//arr数组的下标自增,方便下一次存储
(*index)++;
//递归调用preorder函数来分别遍历根节点的左右子树,
// arr[*index] = root->val;(*index)++;这两行代码在前即为前序遍历
preorder(root->left, arr, index);
//在此处即为中序遍历
preorder(root->right, arr, index);
//在此处即为后序遍历
}
int* preorderTraversal(struct TreeNode* root, int *returnSize){
*returnSize = 0;
int* array = (int*)(malloc)(sizeof(int)*MAX);
preorder(root,array,returnSize);
return array;
}
三、总结
1.注意理解arr[*index] = root->val; (*index)++;
这两句,此处函数传入的参数是 *returnSize,并且在传入之前给 *returnSize赋值为0,即为returnSize这个数组的首元素为0,以数组returnSize中的首元素0作为arr数组的第一个下标,之后数组下标均为returnSize数组首元素依次自增的结果。
2.调整1中的这两句的位置即可进行中序遍历和后序遍历。