1の#include <stdio.hの> 2の#include <STDLIB.H> 3の#include <stdbool.h> 4 5のtypedef int型DATA。 6のtypedef 構造体_SNode_ 7 { 8つの DATAデータ。 9 構造体 _SNode_ * p_Right、* p_Left。 10 } Sノード。 11 12 Sノード* CreateTree(CONST データD) 13 { 14 Sノード* m_root =(Sノード*)はmalloc(はsizeof (Sノード))。 15 m_root->データ= D。 16 m_root-> p_Left = m_root-> p_Right = NULL; 17 リターンm_root。 18 } 19 20 空隙 InsertRight(Sノード* P、CONST データD) 21 { 22 Sノード* PNEW = CreateTree(D)。 23 P-> p_Right = PNEW。 24 } 25 26 空隙 InsertLeft(Sノード* P、CONST データD) 27 { 28 Sノード* PNEW = CreateTree(D)。 29 P-> p_Left = PNEW。 30 } 31 32 ボイドプレオーダー(Sノード* P) 33 { 34 のprintf(" %d個"、P-> データ)。 35 であれば(P-> p_Left) 36 プレオーダー(P-> p_Left)。 37 であれば(P-> p_Right) 38 プレオーダー(P-> p_Right)。 39 } 40 41 空隙順序どおり(Sノード* P) 42 { 43 であれば(P-> p_Left) 44 順序どおり(P-> p_Left)。 45 のprintf(" %のD "、P-> データ)。 46 であれば(P-> p_Right) 47 順序どおり(P-> p_Right)。 48 } 49 50 空隙後順(Sノード* P) 51 { 52 であれば(P-> p_Left) 53 後順(P-> p_Left)。 54 であれば(P-> p_Right) 55 後順(P-> p_Right)。 56 のprintf(" %d個"、P-> データ)。 57 } 58 59 BOOLルックアップ(SNODE P *、CONST DATA D) 60 { 61は 、一方(P) 62は 、{ 63は IF(P->データ== D) 64 リターン trueに、 65 他 IF(P->データ> D) 66 P = P - > P_left; 67 他の 68 P = P - > P_right; 69 } 70 リターン falseに、 71である } 72 73です // 第二の方法:二つのポインタ使用して 74 ボイド関連項目SetAt(SNODE P *、CONST DATA D)// バイナリ検索を作成 75 { 76 IF(P == NULL) 77 { 78 P = CreateTree(D); 79 リターン; 80 } 81 SNODE **&ppRoot = P; 82 一方、(* ppRoot) 83 { 84 IF((* ppRoot) - >データ< D) 85 ppRoot =&(* ppRoot) - > P_right; 86 他 IF((* ppRoot) - >データ> D) 87 ppRoot =&(* ppRoot) - > p_Left。 88 } 89 極悪* PNEW = ツリー(d)を作成します。 90 * ppRoot = PNEW。 91 } 92 93 INT )(主 94 { 95 極悪* PROOT =ツリーを作成する(30 )。 96 関連項目SetAt(PROOT、75 )。 97 関連項目SetAt(PROOT、20 )。 98 関連項目SetAt(PROOT、40 )。 99 関連項目SetAt(PROOT、10 )。 100 関連項目SetAt(PROOT、60 )。 101 関連項目SetAt(PROOT、50 ); 102 103 IF(ルックアップ(PROOT、52である)) 104 のprintf(" 見出さ\ N-!" ); 105 そう 106 のprintf(" 見つかりません\ N-!" ); 107 108 順序どおり(PROOTを); 109 110 戻り 0 ; 111 }