クラスバイナリ検索ツリーを作成しました。
しかし、問題は私がクラッシュするツリーを印刷するときです。
私は関数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);
}
};
は誰も私を助けることができる私のコードですか?
rootがNULLのときに少なくとも確実にクラッシュする – onemach
2つの問題があります。まず、プログラムがクラッシュする原因は、デバッガでプログラムを実行すると明らかになります。もう一つは、ツリーにノードを追加することは決してないということです。なぜなら、デバッガを使って 'add_node'を実行してその理由を調べるというものです。 –