给你二叉树的根节点 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; }