1. カメラ
  2. カーオーディオ&エレクトロニクス
  3. ホームオーディオ
  4. パーソナルオーディオ
  5. テレビ
  6. スマートホーム
  >> 電子技術オンライン >  >> スマートホーム >> スマートライフ

C でバイナリ ツリーを作成する方法

C でバイナリ ツリーを作成する方法 C のバイナリ ツリーは、データを動的に編成して簡単に検索できるようにする優れた方法です。ただし、維持するには多くの作業が必要です。

バイナリ ツリーを作成する

ステップ 1

二分木を構築します。変数が 1 つしかない場合でも、すべてのバイナリ ツリーには構造が必要です。名前を選択し、typedef を使用して作成します:typedef struct student_data STUDENT_DATA;

ステップ 2

構造を定義します。同じ構造体への 2 つのポインターを含めます。 int student_grade; STUDENT_DATA 右;};

ステップ 3

このデータ構造へのポインターを割り当て、NULL に初期化して、ツリーの先頭にします:STUDENT_DATA *students =NULL;

バイナリ ツリーに追加

ステップ 1

データ構造に 2 つの一時ポインタを割り当てます:STUDENT_DATA new_student, cur_student;

ステップ 2

malloc() を使用して新しい要素を作成し、常にエラーをチェックします。 }

ステップ 3

新しい要素のフィールドに入力します。その左右のフィールドを NULL に設定します:new_student->student_ID =newID;new_student->student_size =newsize;new_student->left =NULL;new_student->right =NULL;

ステップ 4

head 変数を考えます。 head 変数が NULL の場合、これがツリーに追加された最初の要素であるため、 head 変数がそれを指すように設定すれば完了です。戻る; }

ステップ 5

ツリーの一番上から始めます:cur_student =students;while (cur_student) {

ステップ 6

新しい値と現在の値が等しい場合、重複するエントリを処理します。 }

ステップ 7

等しくない値に対処します。新しい値が現在の値より小さい場合、新しい要素は左側に配置されます。左側に何もない場合はすぐに追加してください。それ以外の場合は、左にトラバースしてループします。 1 を返します。 } cur_student =cur_student->左;

ステップ 8

それ以外の場合は、右側で同じことを行います。 1 を返します。 } cur_student =cur_student->右; }}

バイナリ ツリーを検索

ステップ 1

データ構造を指す一時変数を作成します:STUDENT_DATA *cur_student;

ステップ 2

一時変数を head 変数に設定します:cur_student =students_head;

ステップ 3

要素をループして、目的の値をチェックします。 }

ステップ 4

左または右に分岐し、見つからない場合はループします。 } そうでなければ { cur_student =cur_student->left; }

ステップ 5

ループが終了するかどうかを確認します。そうであれば、そのアイテムが見つからなかったことを意味します:}return 0;

クリーンアップ

ステップ 1

すべてのオペレーティング システムがこれを自動的に処理するわけではないため、プログラムの終了時にバイナリ ツリーの割り当てを解除します。これは、再帰関数を使用して行うのが最適です:void deallocate_binary_tree(STUDENT_DATA *tree) {

ステップ 2

観察:ツリーがない場合、何もする必要はありません:if (!tree) return;

ステップ 3

左右のサブツリーを再帰的に解放します。 deallocate_binary_tree(tree->left); deallocate_binary_tree(tree->right);

ステップ 4

要素の割り当てを解除すれば完了です:free(tree);}

ヒント

二分木への検索と追加は、再帰を使用して行うこともできます。これは、書くことと維持することははるかに簡単ですが、慣れるまで理解するのは少し難しくなります。実際のデータが存在する 2 番目の C データ構造 (多くの場合、配列またはリンク リスト) へのポインターのみを含むバイナリ ツリーを作成するのが一般的です。各バイナリ ツリーは、リスト データの 1 つのフィールドをすばやく検索するためのインデックスです。

警告

二分木からの削除は、C の非常に複雑なアルゴリズムですが、二分木の多くの用途では、要素が削除されることはありません。