给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
数据范围:二叉树的节点数量满足
,二叉树节点的值满足
,树的各节点的值各不相同
示例 1:
void preorderTraver(struct TreeNode* root, int* res, int* StaticReturnSize ) {
res[(*StaticReturnSize)++] = root->val;
if(root->left!=NULL)
preorderTraver(root->left, res, StaticReturnSize);
if(root->right!=NULL)
preorderTraver(root->right, res, StaticReturnSize);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
static int res[100]={0}, StaticReturnSize=0;
if(root==NULL)
return NULL;
preorderTraver(root, res, &StaticReturnSize);
*returnSize = StaticReturnSize;
return res;
} #include <stdio.h>
#include <stdlib.h>
//记录结点个数
int count=0;
//存储结点值,方便返回
int arr[101];
//先根后左右
void preOrder(struct TreeNode*root,int*arr)
{
if(root)
{
arr[count++]=root->val;
preOrder(root->left, arr);
preOrder(root->right, arr);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
// write code here
preOrder(root, arr);
//便利侯,关系结点数量
*returnSize=count;
return arr;
} #include <stdio.h>
#include <stdlib.h>
struct TreeNode* stack[100]; //作为栈使用,栈底是下标0
int stack_top = -1;
//入栈
void push(struct TreeNode* node)
{
stack[++stack_top] = node;
}
//出栈
struct TreeNode* pop()
{
return stack[stack_top--];
}
//先序遍历 根->左->右
//用栈实现,先进后出
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
if (!root)
{
*returnSize = 0;
return NULL;
}
int* ret_arr = malloc(sizeof(int) * 100);
int i = 0;
while (root || stack_top != -1)
{
//从根节点开始
while (root)
{
//根节点存在,保存val
ret_arr[i++] = root->val;
//每个根节点入栈
push(root);
//根节点左移,也就是每次先将左值保存
//无左结点,跳出对右节点操作
root = root->left;
}
//根节点等于栈顶元素,即上一个无左结点的节点
root = pop();
//开始遍历右节点
root = root->right;
}
*returnSize = i;
return ret_arr;
} /**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* @param root TreeNode类
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
static int count = 0;
static int a[101];
void preOrder(struct TreeNode* root, int* a){
if(root!=NULL){
// printf("%d,", root->val);
a[count++]=root->val;
preOrder(root->left, a);
preOrder(root->right, a);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
preOrder(root, a);
*returnSize = count;
return a;
} struct TreeNode* stack[100]; //作为栈使用,栈底是下标0
int stack_top = -1;
int* preorderTraversal(struct TreeNode* root, int* returnSize )
{
// write code here
int* ret_arr = NULL;
*returnSize = 0;
if(!root)
return ret_arr;
int tmp[100]={0};
int i = 0;
while(root)
{
if(root->right)
stack[++stack_top] = root->right;
tmp[i++] = root->val;
printf("%d ",tmp[i]);
if(root->left)
root = root->left;
else
{
if(stack_top>=0)
root = stack[stack_top--];
else
root = NULL;
}
}
*returnSize = i;
ret_arr = malloc(sizeof(int)*i);
if(!ret_arr)
return NULL;
memset(ret_arr,0,i*sizeof(int));
for(int j = 0;j<i;j++)
ret_arr[j]=tmp[j];
return ret_arr;
} static int num=0;
void PreOrder(struct TreeNode* root,int* arr)
{
if(root)
{
arr[num++]=root->val;
PreOrder(root->left, arr);
PreOrder(root->right, arr);
}
}
int TreeSize(struct TreeNode* root)
{
if(!root)
{
return 0;
}
return TreeSize(root->left)+TreeSize(root->right)+1;
}
int* preorderTraversal(struct TreeNode* root, int* returnSize )
{
int count=TreeSize(root);
int* arr=(int*)malloc(sizeof(int)*count);
PreOrder(root,arr);
*returnSize=count;
return arr;
} static int count = 0;
void preOrder(struct TreeNode *root,int *a){
if(root != NULL){
a[count++] = root->val;
preOrder(root->left, a);
preOrder(root->right, a);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
int *a = (int*)malloc(sizeof(int)*101);
preOrder(root, a);
*returnSize = count;
return a;
}