【发布时间】:2016-05-29 16:59:40
【问题描述】:
我尝试编写一个函数来按顺序遍历二叉树并将其项按顺序放入整数数组中。我知道这段代码包含一些不好的做法,但我想知道的是为什么我的函数不会创建目标整数数组。例如,即使我的函数可以找到保留 bst 的所有项目所需的大小,它也无法正确放置这些项目。有时它只放置 2 个节点,有时只放置根。
我认为没有任何理由将任何 main 函数放在这里,因为我只会将它用于打印该数组的元素。
我的函数、全局变量和 TreeNode 的 typedef 块;
typedef struct TreeNode{
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
int ctr = 0;
int size = 0;
int* inorder(TreeNode *root, int* arr){
if(ctr==0) /*if first call to this function*/
arr = malloc(size*sizeof(int)) ;
ctr++ ;
if(root){
if(!root->left && !root->right){
arr = realloc(arr, ++size*sizeof(int)) ;
arr[size-1] = root->val ;
}
else if(!root->left&&root->right){
arr = realloc(arr, ++size*sizeof(int)) ;
arr[size-1] = root->val ;
arr=inorder(root->right,arr) ;
}
else if(!root->right&&root->left){
arr=inorder(root->left,arr) ;
arr = realloc(arr, ++size*sizeof(int)) ;
arr[size-1] = root->val ;
}
else{
arr=inorder(root->left,arr) ;
arr = realloc(arr, ++size*sizeof(int)) ;
arr[size-1] = root->val ;
arr=inorder(root->right,arr) ;
}
return arr ;
}
else
return arr ;
}
【问题讨论】:
标签: c binary-search-tree inorder