私はバイナリツリーでプリオーダートラバーサルを実装しようとしていました。これは私のコードスニペットです。私のコードにエラーが表示される理由セグメンテーションフォールト(コアダンプされた)
#include <iostream>
using namespace std;
struct node{
int data;
struct node *left;
struct node *right;
};
struct node *root= NULL;
struct node *inorder_search(struct node *node, int val){
inorder_search(node->left,val);
if(node->data==val) return node;
inorder_search(node->right,val);
}
void insert(int data1, int data2, char subtree){
struct node *current;
struct node *temp1;
struct node *temp2;
temp1->data= data1;
temp1->left= NULL;
temp1->right= NULL;
temp2->data= data2;
temp2->left= NULL;
temp2->right= NULL;
if(root==NULL){
root= temp1;
if(subtree=='R'){
root->right= temp2;
return;
}
else{
root->left= temp2;
return;
}
}
else{
current= inorder_search(root,data1);
if(subtree=='R'){
current->right= temp2;
return;
}
else{
current->left= temp2;
return;
}
}
}
void preorder_traversal(struct node *node){
if(node==NULL) return;
cout<<node->data<<" ";
preorder_traversal(root->left);
preorder_traversal(root->right);
}
int main(void){
int edges;//edges= no. of edges
cout<<"Enter the number of edges: ";
cin>>edges;
int i;
int relations= edges*3;
int *arr= new int[relations+1]; //since input is in the form 1 2 R 1 2 L where R= right subtree, L= left subtree
for(i=0; i<relations;i++) cin>>arr[i];
for(i=0;i<relations;i+=3) insert(arr[i], arr[i+1], arr[i+2]);
preorder_traversal(root);
}
コードは、次の入力タイプ
1 2 L 1 3 R
関数insert()、Iは、アレイの形で撮影された入力のツリーを作成しようとしているためです。 inorder_search()関数は、データが追加される左または右のサブツリーに特定のノードを検索するために使用され、insert()関数に返されます。例えば、1 2 L 1 3 Rにおいて、 '1'は、それぞれ、 '2'および '3'が左および右のサブツリーであるノードである。したがって、inorder_search()関数で '1'を検索し、それに応じて '2'または '3'が挿入されたノードをinsert()関数で返します。
誰かが私が間違っているところを説明し、それを実装するより良い方法があるかどうかを説明できますか?
それは割り当てですか? –
デバッガを使用して、コアダンプを調べます。どこで(stacktrace)それはクラッシュですか? –
どこにも割り当てがありません。あなたはその 'insert'について確信していますか?いずれにせよ、これはC++よりもCです。 – Zeta