gpt4 book ai didi

c - c 中的二叉树 -> 在深度超过 7 时崩溃

转载 作者:行者123 更新时间:2023-11-30 19:21:02 24 4
gpt4 key购买 nike

  1. 我用c语言制作了一个简单的二叉树结构。
  2. 在 main() 中,创建、打印和删除一棵树(以测试一切是否正常)。
  3. 它在 7 个节点的深度下工作正常,但如果我将深度设置为 8 或更多,它就会崩溃。
  4. 我尝试了很多方法,但结果总是一样,我似乎缺少一些基本概念。
  5. 感谢所有评论。

    #include<stdio.h>
    #include<stdlib.h>

    typedef struct tree tree;

    struct tree{
    int depth;
    int data;
    tree *up;
    tree *left;
    tree *right;
    };

    void printTree(tree *node){
    if(node){
    for(int i = 0; i < node->depth; ++i) printf("\t");
    printf("%d: ", node->depth);
    printf("%d\n", node->data);
    printTree(node->left);
    printTree(node->right);
    }
    }

    void fillTree0(tree *node){
    if(node->depth < 8){ //depth of 8
    //deklaration
    node->left = new tree;
    node->right = new tree;
    //set up
    node->left->up = node;
    node->right->up = node;
    //set depth
    node->left->depth = node->depth +1;
    node->right->depth = node->depth +1;
    //set data 0
    node->left->data = 0;
    node->right->data = 0;
    //recursion
    fillTree0(node->left);
    fillTree0(node->right);
    }
    }

    void freeTree(tree *node){

    if(node->left) freeTree(node->left);
    if(node->right) freeTree(node->right);

    delete(node->left); node->left = NULL;
    delete(node->right); node->right = NULL;

    }


    int main(void){

    tree *root;
    root = new tree;

    root->depth = 0;
    root->data = 0;
    fillTree0(root);

    printTree(root);

    freeTree(root);

    return 0;

    }

最佳答案

您必须将左右节点指针初始化为 NULL:

    node->left = new tree;
node->left->left = NULL ;
node->left->right = NULL ;

node->right = new tree;
node->right->left = NULL ;
node->right->right = NULL ;

因为你的打印功能:

void printTree(tree *node){
if(node){ //<-- this is equal to if( node != NULL)

依赖于无效指针 left 和 right 为 NULL,如果不是,您将访问未分配的内存并导致段错误。

关于c - c 中的二叉树 -> 在深度超过 7 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20600690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com