再帰呼び出しを使う2分木の質問です。初めにこちらのプログラムは正しいでしょうか?Binarry_Tree関数に配列の値を引数にとると、Segmentation fault 11というエラーがでてしまいます。
また、下のような出力結果を出したい時どうすれば良いでしょうか?Print_Tree関数は未完成です。
Input Number: 8 (root)
[ 8] is joined at アドレス; Parent: 0
Input Number: 5
[ 5] is joined at アドレス; Left child of Parent: 親のアドレス
Input Number: 7
[ 7] is joined at アドレス; Right child of Parent: 親のアドレス
コメントアウトは無視してください。 よろしくお願いします。
C++
1#include <iostream> 2using namespace std; 3 4struct TREE{ 5 int data; 6 TREE *Parent; 7 TREE *LeftChild; 8 TREE *RightChild; 9}; 10 11void Binary_Tree(TREE *,int ); 12void Add_New_Vertex(TREE *,int ); 13void Print_Tree(TREE *,int); 14 15 16int main() 17{ 18 TREE *root = new TREE; 19 20 int a[] = {8,5,7,3,10,9,6,1,20}; 21 int i = 0; 22 //int x=5; 23 24 root->data=a[i]; 25 root->Parent = NULL; 26 root->LeftChild = NULL; 27 root->RightChild = NULL; 28 29 for(i=1;i < 9; i++){ 30 x=a[i]; 31 Binary_Tree(root,x); 32 } 33 //Binary_Tree(root,x); 34 35 /*for(int j=1; i<9; i++){ 36 Print_Tree(root,a[i]); 37 */ 38 39 //cout<< root->data <<" " << root <<" " << root->Parent <<" " << root->LeftChild <<" " <<" " << root->RightChild << endl; 40 //cout<< root->LeftChild->data <<" " << root->LeftChild <<" " << root->LeftChild->Parent <<" " << root->LeftChild <<" " <<" " << root->RightChild << endl; 41 //cout<< root->LeftChild->RightChild->data <<" " << root->LeftChild->RightChild <<" " << root->LeftChild->RightChild->Parent <<" " << root->LeftChild <<" " <<" " << root->RightChild << endl; 42} 43 44void Binary_Tree(TREE *p,int x) 45{ 46 47 if(x < p->data && p->LeftChild != NULL){ 48 Binary_Tree(p->LeftChild,x); 49 }else if(x > p->data && p->RightChild !=NULL){ 50 Binary_Tree(p->RightChild,x); 51 }else{ 52 Add_New_Vertex(p,x); 53 } 54 55} 56 57 58void Add_New_Vertex(TREE *p,int x) 59{ 60 TREE *add = new TREE; 61 62 add->data = x; 63 if(x < p->data){ 64 p->LeftChild = add; 65 p->RightChild = NULL; 66 add->Parent = p; 67 }else if(x > p->data){ 68 p->RightChild = add; 69 p->LeftChild = NULL; 70 add->Parent = p; 71 } 72} 73 74 void Print_Tree(TREE *p,int x ){ 75 76 if(x < p->data && p->LeftChild != NULL){ 77 cout << p->data << endl; 78 Print_Tree(p->LeftChild,x); 79 }else if(x > p->data && p->RightChild !=NULL){ 80 cout << p->data << endl; 81 Print_Tree(p->RightChild,x); 82 } 83 cout << p->data << endl; 84 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/07 01:49