目录
- 题目
- 题目要求
- 示例
- 解答
- 方法一、
- 实现思路
- 时间复杂度和空间复杂度
- 代码
- 方法二、
- 实现思路
- 时间复杂度和空间复杂度
- 代码
题目
二叉树的前序遍历
题目要求
题目链接
示例
解答
方法一、
递归法
实现思路
使用递归依次将该结点的数据,该结点的左子树的数据,该结点的右子树的数据都存入数组中,其中函数中i为一个地址,通过解引用这个地址就可以得到i的值,即数组中该第几个下标存值。
时间复杂度和空间复杂度
时间复杂度:O(N)
空间复杂度:O(N)
代码
void PreOrder(struct TreeNode* root,int* arr,int* i){if(root==NULL){return ;}//因为是先序遍历,所以先遍历该结点的值arr[*i]=root->val;//将i的值+1//因为传进来的i为地址,所以通过*i改变的是i地址里面的值,即改变的是主函数中的i的值(*i)++;//然后再遍历该结点左子树PreOrder(root->left,arr,i);//最后遍历该结点右子树PreOrder(root->right,arr,i);}//求出二叉树的结点个数int TreeSize(struct TreeNode* root){if(root==NULL){return 0;}return TreeSize(root->left)+TreeSize(root->right)+1;}
int* preorderTraversal(struct TreeNode* root, int* returnSize){//将数组长度返回*returnSize=TreeSize(root);int i = 0;//申请数组空间int* arr = (int*)malloc(sizeof(int)*(*returnSize));//将i的地址传入,这样在函数中可以通过*i修改i的值。PreOrder(root,arr,&i);return arr;
}
方法二、
实现思路
时间复杂度和空间复杂度
代码