使用递归创建二叉树时调用堆栈错误

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 (!!)