繁体   English   中英

打印不平衡的二叉树

[英]Printing unbalanced 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);

我只是从树开始,并不完全了解此错误的原因。 你能帮忙吗?

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

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

访问冲突是指访问程序时不允许访问的内存。

您的问题不是树,您的问题是正确使用指针并且未正确初始化变量。

我怀疑您的问题是tree的构造函数未正确执行:

left = NULL;
right = NULL;

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

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

链接到C ++指针教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM