使用递归创建二叉树时调用堆栈错误
Call stack error when creating binary tree with recursion
以下代码运行一秒后出现运行时错误 node->data = *data;
Node *TreeCreate(int level, const char *data)
{
Node *node = malloc(sizeof(node));
if (node != NULL) {
node->data = *data;
}
if (level != 0) {
node->leftChild = TreeCreate(level - 1, data + 1);
node->rightChild = TreeCreate(level - 1, data + (int)pow(2, level - 1));
}
return node;
}
即使您为 *data 引用的字符串至少保留了 pow(2, level) 个字符,下一个 TreeCreate() 调用也会超出这些边界:
TreeCreate(level, data) //-->
TreeCreate(level, data + 1) //--> ...
TreeCreate(level, data + pow(2, level-1) // -->
TreeCreate(level, data + pow(2, level-1) + 1) //--> well still may fit to you string
TreeCreate(level, data + pow(2, level-1) + pow(2, level-2) // --> may not fit
例如,level = 4,data指向的字符串的大小= 16,当沿着leftChild的TreeCreate()调用树向下走时,将导致:
数据 + 4 + pow(2, 3) + pow(2, 2) + pow(2, 1) --> 数据 + 18 (!!)
以下代码运行一秒后出现运行时错误 node->data = *data;
Node *TreeCreate(int level, const char *data)
{
Node *node = malloc(sizeof(node));
if (node != NULL) {
node->data = *data;
}
if (level != 0) {
node->leftChild = TreeCreate(level - 1, data + 1);
node->rightChild = TreeCreate(level - 1, data + (int)pow(2, level - 1));
}
return node;
}
即使您为 *data 引用的字符串至少保留了 pow(2, level) 个字符,下一个 TreeCreate() 调用也会超出这些边界:
TreeCreate(level, data) //-->
TreeCreate(level, data + 1) //--> ...
TreeCreate(level, data + pow(2, level-1) // -->
TreeCreate(level, data + pow(2, level-1) + 1) //--> well still may fit to you string
TreeCreate(level, data + pow(2, level-1) + pow(2, level-2) // --> may not fit
例如,level = 4,data指向的字符串的大小= 16,当沿着leftChild的TreeCreate()调用树向下走时,将导致: 数据 + 4 + pow(2, 3) + pow(2, 2) + pow(2, 1) --> 数据 + 18 (!!)