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