c++ - 为什么我不能打印二叉树?

标签 c++ class binary-tree

<分区>

我创建了一个类二叉搜索树。
但问题是当我打印树时它崩溃了。
我认为它可以是函数 print() 中的无限递归。

这是我的代码

struct node{
node *l,*r;
int data;
};

class BinTree
{
  private:  node *root;
  public:
   BinTree(){ root=NULL; }
   void add(int a){ add_node(a,root); };
   void add_node(int a, node *rot)
   { node *curr; curr=rot;
       if(curr==NULL)
       {
           curr=new node;
           curr->data=a;
           curr->l=NULL;
           curr->r=NULL;
           return;
       }
       if(a>=curr->data)   curr=curr->r,add_node(a,curr);
       if(a<curr->data)    curr=curr->l,add_node(a,curr);
   }
   void print(){ inorder(root); }
   void inorder(node *curr)
   {
     if(curr->l!=NULL)   inorder(curr->l);
     cout<<curr->data<<" ";
     if(curr->r!=NULL)   inorder(curr->r);
   }
};


谁能帮帮我?

最佳答案

在您的add_node 方法中,您从未真正为根节点赋值。它应该是这样的:

if(curr==NULL) 
{ 
    curr=new node; 
    curr->data=a; 
    curr->l=NULL; 
    curr->r=NULL; 
    root = curr;
    return; 
} 

但是,对于 future ,我有与 Basile 相同的建议 - 使用你的编译器和调试器来发挥你的优势。

关于c++ - 为什么我不能打印二叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8381934/

相关文章:

c++ - 如何将类对象数组转换为 vector 数组?

c++ - 为什么下面的打印树功能不起作用?

c++ - ZeroMQ C++中的多个发布者这是一个不错的选择吗?

c++ - 如何在内存缓冲区上实现 seekg/seekpos?

c++ - CMake:find_package 中的项目如何破坏程序?

java - 获取 JAR 文件的位置

c# - 在 C# 中使用抽象类

c++ - Popen 使 Qt 调试器崩溃

java - 插入二叉树(无序)

java - 计算Java中二叉树中的节点数