• ベストアンサー

二分木探索でN番目の要素を探索するには

二分木探索で特定の要素の有無を調べる関数は作れたのですが、N番目に小さい要素を見つける方法が思い浮かびません。 二分木探索でN番目に小さい(昇順でN番目)の要素を探索するにはどのような手法があるのか教えて頂けないでしょうか? よろしくお願い致します。

noname#225287
noname#225287

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

確か、通りがけ順を使うと小さいものから探索するはずです。 小さい方からN番目が求める答えではないでしょうか。

その他の回答 (1)

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

scanf("%d",&n)をグローバル変数に代入でどうですか void _search(node_p * node,int n){ if(node->left != NULL)_search(node->left,n); GLOBAL_count--; if(GLOBAL_count == 0) printf("%d 番目の要素 => %d\n",n,node->num); if(node->right != NULL)_search(node->right,n); }

関連するQ&A

  • 二分探索木の問題

    分からない問題があります。 {4,5,6,8,9,10,18}を要素とする2分探索木を考える。4を探索するのに最も手間のかからない、高さの異なる2分探索木を2つ図示しなさい。 どなたかお教え下さい。

  • 二分探索木

    二分探索木の完全なソースコードが載っているサイトは無いでしょうか??調べてみたのですが、関数ごとに分けて書かれているものばかりで、中々見つかりません。お願いします。

  • n番目に大きな値を探索する

    Java初心者です。 Javaで「n番目に大きい値を探索」するプログラムを組みたいのですが、お力を貸してください! 配列データ(10)には各要素に1~10の値が入っています。 ただし配列データをランダムで数値を入れた場合でも動くこと。 ランダムで決めたn番目の値を探索するプログラムです。 ---- int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //配列データの順番はランダムに並び替わります int n = random.nextInt(data.length) + 1; for(int range = 0; range < n; range ++) { //n番目の要素が見つからなかった場合 if(n > data.length) { System.out.print(n + "番目に大きい要素は見つかりませんでした。"); break; } /* 範囲の先頭から最後まで処理を繰り返し、範囲内の最小値が格納 * されている要素を決定する */ for(int seach = range + 1; seach < data.length; seach ++) { //基準値より探索値が小さかった場合 if(data[range] <= data[seach]) { int swa = data[range]; data[range] = data[seach]; data[seach] = swa; } } //n番目の要素が見つかった場合 if(n -1 == range) { System.out.print(n + "番目に大きい要素は" + data[range] + "です。"); break; } } ---- と言う感じで一度組んでみたのですが、 配列に格納されている値を変更しないようにと言われました。 まず一番大きな値を探し、その値より小さい値を順に探索していけばいいのだと思うのですが、いまいち分かりません。 誰か教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • 二分探索木を用いての探索

    C言語でプログラミングしています。 二分探索木を用いて探索するプログラムなのですが 与えられた値の前後の値(与えられた値より大きく(小さく)てその値 に一番近いもの)を見つけたいのですが分かりません。 いろいろとネット等で調べてみると「挿入してその左右を見る」 となっているのですが…。 普通の二分探索木ではだめなのでしょうか? よろしくお願いします。

  • schemeで二分探索木の問題について

    schemeの問題で,「二分探索木であることを判定する関数を定義せよ」という問題があります。二分探索木とは,左の部分木に含まれる値はノードの値より小さく,右は大きい二分木です。 頑張って考えたのですが,まったくわかりません。 どなたかご回答をしていただけると助かります。 よろしくお願いします。

  • 2分木と2分探索木の違い

    タイトル通り、2分木と2分探索木の違いが分かりません。同じ事なのでしょうか。 初心者です。よろしくお願い致します。

  • 二分探索木と二分探索の違い

    高校のときにCOBOLを用いた二分探索を習いました。 今大学でコンピューター科学を勉強しています。予習をしていたら二分探索木が出てきました。 添付画像のような二分木があるとき、a~jの各ノードに1~10の整数のどの整数が入るか。 という問題ですが、ちんぷんかんぷんです。 二分探索木というのは、検索で用いる二分探索と同じ考えなのでしょうか。 もし、同じなら、1~10の中央値の5がルートになりますよね。 このような問題の簡単な求め方があれば教えてください。お願いいたします。

  • 二分探索は木のように例えられる?

    二分探索は、「半分にして対象外の値を除去しながら探索する」ということですが、分かりやすい例えで言うと、木の枝が伸びるような感じで探索する感じでしょうか? 回答のほうよろしくお願いいたします。

  • 探索木の問題について

    探索木について。 探索木において、探索効率を高めるため(探索経路を短くするため)、子の数を最大m個までとするm分探索木を考える。この木の探索についての計算量は、どのように考えれば良いですか。 説明してください。 という問題なのですが 画像のA,Bのタイプのどちらで考えればいいのかわかりません そこで、どちらのタイプで考えればいいのか あわよくば、問題についても答えを教えてください よろしくおねがいします

  • 二分探索木の深さについてです。

    二分探索木の深さについてです。 この画像の式4.1から4.2への変換の解説・手順。また、式4.2から4.3への変換の解説・手順。最後に4.4への変換の説明をお願いします。 できるだけ詳しく書いていただけると助かります iD(i-1)をD(n-1)を用いて表そうとかんがえたのですが、出来ません。 http://34vv.net/drg/ できないです(T_T)

専門家に質問してみよう