繁体   English   中英

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

[英]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()调用树时,将导致:data + 4 + pow(2,3)+ pow(2,2)+ pow(2,1)->数据+ 18(!!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM