No.4ベストアンサー
- 回答日時:
ずっと以前に作ったことがあるので、うろ覚えですが・・・。
balance(node)
{
if (node == NULL) break;
nl = count_node(node.left);
nr = count_node(node.right);
while (abs(nl - nr) > 1) {
if (nl > nr+1) {
data = get_max_node(node.left);
append_node(node.right,data);
} else if (nr > nl+1) {
data =get_min_node(node.right);
append_node(node.left,data);
}
nl = count_node(node.left);
nr = count_node(node.right);
}
balance(node.left);
balance(node.right);
}
木のrootに対して、balance(root)を行います。
get_max_node(node)は、node以降の枝から最大のdataを削除し、そのdataを返します。
append_node(node,data)は、node以降の木にdataを追加します。
再帰呼び出しの終了条件がこれで良いかどうか、自信無しです。
文法的にもかなりいいかげんなので、処理の概念の参考程度にして下さい。
No.3
- 回答日時:
2分木にこだわるなら、バランスを保った
2文探索木でAVL木という概念があります。
ノートを1つ追加した時に、AVL木が崩れた時に。
再構築処理をします。
この
「ノートを1つ追加した時に、AVL木が崩れた時に。
再構築処理をします。
」についてのアルゴリズムを探すとよいと思いますが。かなり複雑な部類にはいるのでそんなに情報もないかも。あったとしても理解できるか・・。
多分木でもよいならNo2さんの回答も参考にして、
B木という方法もあるかも。
あんまりこの手のアルゴリズムをゴリゴリと
コードで書くのは、職業PGではあまりしないように
思えます。なにかの研究をするのでなければ、
STL等を学習してデータ処理周りは自分で書かないのが
理想です。
C#や、Javaにおいてもテンプレートのような
型汎用性のあるコードを書けるように進化してきているので、今後はその傾向がますます色濃くなるかも
しれないです。
No.2
- 回答日時:
どもです。
「C―データ構造とプログラム」という本に、
(1) データが昇順で与えられる
(2) データの数が予めわかっている
を条件に、完全にバランスした2分木を構築する方法が載っています。
なので、そのアプリの起動時等に完全にバランスした2分木にするとかで良いのではないでしょうか。
ちなみにこの本にはB木の構築方法も載っているので、B木にしてしまった方が良いかもしれません。
ではでは。
参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4274075 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 数学 特定の座標点を通る回帰を行う方法について。 2 2022/10/10 10:27
- Instagram インスタで見かけた場所に行きたいのですがざっくりした(○○県)しか分かりません。他の方が何処かを尋ね 3 2022/12/03 19:22
- アニメ 宮崎吾朗氏がスタジオジブリへ鈴木氏に無理やり連れてこられた際のエピソードについて 1 2023/06/17 16:48
- 農学 樹木の名前、教えてください 1 2022/10/31 19:41
- 引越し・部屋探し 来年から神奈川で一人暮らしなので部屋探しをしています。 場所や家賃は同じだとして、以下の二つだとどっ 3 2022/12/21 16:17
- アイドル・グラビアアイドル 乃木恋の話 1 2022/06/14 06:42
- 虫除け・害虫駆除 【庭木や木の消毒薬について】 うちの庭木や木の 害虫予防対策(駆除)として、 消毒薬を探しております 3 2022/05/06 14:34
- 演歌・歌謡曲 昭和〜平成歌謡で「名前さえ忘れていた」と言う歌詞の入るデュエット曲 1 2022/10/20 19:12
- その他(趣味・アウトドア・車) 岐阜近郊で原木で椎茸栽培をされている方ご存じであれば教えてください。 不用になった原木を分けていただ 1 2022/05/16 06:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
BCDについて
-
【VisualBasic】ユークリッドの...
-
障害物回避プログラム
-
Stuck
-
ガウス・ジョルダン法のプログ...
-
グループを均等に分けるには?...
-
パズルが好きな人ってプログラ...
-
openSSLのAES暗号化アルゴリズ...
-
一般的な解法を用いないで魔法...
-
C♯で電卓を作成しています。演...
-
ハッシュアルゴリズム
-
Dijkstraて
-
【JAVA】数字をひし形に出力す...
-
Excelで4096点以上のFFTの方法
-
65536は2の何乗なのでしょうか?
-
C++ で、「)」が必要 というエ...
-
フローチャートで 変数に代入す...
-
テキストボックスのエンターキ...
-
0除算して、落ちるプログラムと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
Dijkstraて
-
Stuck
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
グループを均等に分けるには?...
-
三次元形状曲面の導出法
-
あいまい検索(文字列一致率)
-
Visual studio2019 C#で生まれ...
-
gooという検索エンジンの後にGo...
-
フリーセルの難易度について
-
C♯で電卓を作成しています。演...
-
経路探索について
-
CRC-CCITT16の算出法
-
理系の高校生です。大学で情報...
-
詰め将棋をとくのは、アルゴリ...
-
偏りのある乱数のアルゴリズム
-
OpenCVのライセンスについて
おすすめ情報