【发布时间】:2014-06-14 21:27:41
【问题描述】:
我做了这个 BinaryTree 实现,除了 freeTree() 方法说我正在尝试释放一个未分配的指针之外,它工作正常。我只是找不到我的逻辑在这里出错的地方。 我不知道如何准确找到它所在的指针。 有什么提示、技巧吗?
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <stdio.h>
struct BinaryTree
{
int data;
struct BinaryTree *left;
struct BinaryTree *right;
};
typedef struct BinaryTree BinaryTree;
FILE *input;
FILE *output;
char dat[99];
int number;
BinaryTree tree;
void add(int data, BinaryTree *tree);
void inorderTraversal(BinaryTree *tree);
void freeTree(BinaryTree *tree);
int main()
{
input = fopen("/Users/sergeymikhaylyuk/Desktop/Program/Tree/input.txt", "r");
output = fopen("/Users/sergeymikhaylyuk/Desktop/Program/Tree/sorted.txt", "w");
while (fgets(dat, sizeof(dat), input))
{
sscanf(dat, "%i", &number);
add(number, &tree);
}
inorderTraversal(&tree);
freeTree(&tree);
}
void add(int data, BinaryTree *tree)
{
if (tree->data == 0)
{
tree->data = data;
}
else
{
if (tree->data < data && tree->right != NULL)
{
add(data, tree->right);
}
else if (tree->data < data)
{
tree->right = malloc(sizeof(BinaryTree));
add(data, tree->right);
}
else if (tree->data > data && tree->left != NULL)
{
add(data, tree->left);
}
else if (tree->data > data)
{
tree->left = malloc(sizeof(BinaryTree));
add(data, tree->left);
}
}
}
void inorderTraversal(BinaryTree *tree)
{
if (tree != NULL)
{
if (tree->left != NULL)
{
inorderTraversal(tree->left);
}
fprintf(output, "%i ", tree->data);
if (tree->right != NULL)
{
inorderTraversal(tree->right);
}
}
}
int i = 1;
void freeTree(BinaryTree *tree)
{
printf("%i ", i);
i++;
if (tree != NULL)
{
if (tree->left != NULL)
{
freeTree(tree->left);
}
if (tree->right != NULL)
{
freeTree(tree->right);
}
free(tree);
}
}
【问题讨论】:
标签: c pointers binary-tree