質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1438閲覧

二分木のfind関数について

ayousanz

総合スコア258

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/05/21 13:25

二分木について勉強しています。その中である数を見つけるために関数findを作ったのですが、segmentation faultになってしまいます。同じような中身のものは(正解とされているのも)ではそのまま通ります。
何が原因なのでしょうか。

c++

1bool BinarySearchTree::find( int x, BinaryNode* p ) const 2{ 3 if(p -> key == x)return true; 4 else if(p -> key < x) return find(x,p -> left); 5 else if(p -> key > x) return find(x,p -> right); 6 else {return false;} 7}

以下はクラスの定義です。

c++

1#include <iostream> 2#include <string> 3#include <new> 4using namespace std; 5 6class BinaryNode // 2分木のノードのクラス 7{ 8 int key; // 各ノードには整数を格納する。 9 // マップ(キーと値の対応)にはなっていない。 10 11 BinaryNode* left; // 左の子ノードへのポインタ 12 BinaryNode* right; // 右の.. 13 14public: 15 BinaryNode( int x ): key(x), left(NULL), right(NULL) { }; 16 // コンストラクタでメンバーを初期化 17 18 friend class BinarySearchTree; // BinarySearchTree クラスから 19 // このクラスのプライベートメンバへの 20 // アクセスを許可する。 21}; 22 23 24 25class BinarySearchTree // 2分探索木のクラス 26{ 27 28 BinaryNode* root; // 2分木の根(root)を指すポインタ。 29 // デーメンバはこれだけ。 30 31public: 32 BinarySearchTree( ); 33 ~BinarySearchTree( ); 34 bool Insert( int x ); 35 bool Find( int x ) const; 36 void Show( ) const; 37 bool RemoveMin(); 38 bool RemoveMax(); 39 40 41private: 42 bool insert( int x, BinaryNode* & p ); 43 bool find( int x, BinaryNode* p ) const; 44 void show( BinaryNode* p ) const; 45 void makeEmpty( BinaryNode* p ); 46};

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

このfind関数の場合、「検索対象が存在しない木に対しての検索」を試みた場合、メモリアクセス違反を起こします。つまり、return falseに到達することがあり得ません。

投稿2018/05/21 13:37

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayousanz

2018/05/22 01:37

ありがとうございます。エラーが起きないように書き換えてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問