2015-03-03 232 views
0

我故意创造这个代码错误的和不平衡的二叉树:打印不平衡的二叉树

void createlist (tree*& node) { 
node = new tree; 
    node->num = 1; 
    node->left = new tree; 
    node->left ->num = 2; 
    node->right = new tree; 
    node->right->num = 3; 
    node->left->left = new tree; 
    node->left->left->num = 4; 
    node->left->right = new tree; 
    node->left->right->num = 5; 
    node->right->left = new tree; 
    node->right->left->num = 6; 
    node->left->left->left = new tree; 
    node->left->left->left->num = 7; 
} 

然后,当我试图使用一个普通的功能,打印:

void print (tree* node) { 
     if (node!= 0) { 
      print (node->left); 
      cout << node->num << " "; 
      print (node->right); 
     } 
    } 

它抛出一个错误:

Access violation reading location 0xcdcdcdd5. 

在此位置:

print (node->left); 

我刚刚开始使用树木,不太理解这个错误的原因。你能帮忙吗?

+0

你指的是哪一个树类? – matthias 2015-03-03 12:07:40

回答

1

这是一个很好的机会让你学习如何调试你的程序。我建议你在调试器中运行程序,看看节点和节点 - >左边的值是什么时候发生段错误。

access violation是当您访问您的程序不允许访问的内存时。

你的问题不是树你的问题正确使用pointers并且没有正确地初始化你的变量。

我怀疑你的问题是,constructor的树没有做正确:

left = NULL; 
right = NULL; 

记得在C/C++是在创建时,编译器不设置任何特定值到变量,它是由给你初始化变量。

定制使用NULL(或在C++ 11中的nullptr)而不是0来测试/设置指针。

Link to C++ pointers tutorial

1

很难说,没有您的tree类的来源,但也许使new tree不会将leftright成员初始化为空指针?在这种情况下,一些树会包含未初始化的指针数据。