打印不平衡二叉树

时间:2015-03-03 12:05:22

标签: c++ tree binary-tree

我故意在这段代码中创建一个错误且不平衡的二叉树:

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);

我只是从树开始,并不完全遵循这个错误的原因。你可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是您学习如何调试程序的绝佳机会。我建议你在调试器中运行程序,看看当segfault发生时node和node-> left的值是什么。

当你访问不允许你的程序访问的内存时access violation

您的问题不是树,而是您的问题正确使用pointers而未正确初始化变量。

我怀疑您的问题是树的constructor没有正确执行:

left = NULL;
right = NULL;

请记住,在C / C ++中,编译器在创建变量时不会将任何特定值设置为变量,由您来初始化变量。

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

Link to C++ pointers tutorial