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

标签 c tree crash binary-tree depth

  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/

相关文章:

c - 获取一个数字数组,然后仅显示不同的数字

c - 用指针反转c中的字符串

c - 如何将 strtok 与每个非字母字符一起用作分隔符? (C)

用于构建树节点层次结构的 javascript 库

algorithm - 路径压缩和按等级合并如何相互补充?

iphone - iPhone应用程序在出现内存警告事件之前崩溃

ios - XCode 6.3.1 在更新配置文件时崩溃

c - 外文字符替换为 "?"

java - JTree 出现问题,它不显示

Cordova:调整相机插件会使应用程序和相机崩溃