トレーニングデータ構造(III)xは---バイナリツリーのノードが存在するか否かを判定する

リストは、バイナリツリーアルゴリズムを決定されるxのノード値が用意されているかどうか、バイナリ構造体に格納されています。

最初の行は、バイナリツリーの拡張シーケンス先行順走査である[入力]フォームの2行を、2行目が照会ノードXとなる
[フォーム]であれば、出力ノードx、出力が「YES」、そうでない場合、出力は「NO」。
サンプル入力[#] D ## C ## AB
D
[]サンプル出力
YES

BiTree.hファイル(トラバーサルのプリアンブルに含まれます)

BITREE_H_INCLUDED #ifndefの
 に#define BITREE_H_INCLUDED
 使用 名前空間STD;
 // 定義されたノード 
テンプレート<データ型typenameです> 構造体BiNode 
{ 
    データ型のデータを、
    BiNodeを <データ型> lchild *、* rchild; 
}; 
テンプレート <型名データ型>
 クラスBiTree 
{ パブリック// 構築機能、バイナリ1     BiTree()
    { 
        ルート = クリート(); 
    } // デストラクタリリースノードの記憶スペースBiTree()
    { 
        放出(ルート)。





     
    } 

    //プレオーダーバイナリツリーのトラバース
    空隙プレオーダー()
    { 
        プレオーダー(ルート); 
    } 

    // プレオーダーバイナリツリー
    ボイド順序どおり()
    { 
        順序どおり(ルート); 
    } 

    // 後順バイナリツリー
    ボイド後順()
    { 
        後順(ルート); 
    } 

    / / Xの有無数決定
    BOOL ExistX(データ型X)
    { 
        リターン; ExistX(ルート、X)
    } 
プライベート
    BiNode <データ型> * クリート();
     ボイドリリース(BiNode <データ型> * BT)、
     ボイド予約限定(BiNode <データ型> * BT);
     無効順序どおり(BiNode <データ型> * BT);
     無効後順(BiNode <データ型> * BT);
     BOOL ExistX(BiNode <データ型> * BT、データ型X); 
    BiNode <データ型> * ルート; 

}; 

// ビルド機能、バイナリ1 
テンプレート<型名データ型> 
BiNode <データ型> * BiTree <データ型> ::クリート()
{ 
    BiNode <データ型> * BT;
     チャーCH; 
    CIN >> CH;                     / / 入力ノードデータ情報
    IF(CH == '"
        BT = nullptr A;     // 空のツリーの構築
    
    { 
        BT = 新しい新しい BiNode <データ型> ; 
        BT - >データ= CH; 
        BT - > lchild =クリートを();    // 確立再帰左サブツリー 
        BT-> rchild =レコード生成();    // 設立右サブツリーを再帰
    }
     返すBTを; 
} 

// デストラクタリリースノードのストレージスペース 
テンプレート<typenameにはDataType> のボイド BiTree <データ型> ::リリース(BiNode <データ型> * BT)
{ IF(BT == nullptr a)に
         戻り

    他の
    { 
        リリース(BT - > lchild); 
        リリース(BT - > rchild);
        削除BT; 
    } 
} 

// 前序遍历二叉树 
テンプレート<型名データ型> ボイド BiTree <データ型> ::プレオーダー(BiNode <データ型> * BT)
{ 場合(BT == nullptr)
         のリターン;
    他の
    { 
        coutの << BT-> データ; 
        予約限定(BT - > lchild); 
        予約限定(BT - > rchild); 
    } 
} // 中序遍历二叉树

    


テンプレート<typenameにはDataType> のボイド BiTree <データ型> ::順序どおり(BiNode <データ型> * BT)
{ 場合(BT == nullptr)
         リターン
    { 
        順序どおり(BT - > lchild)。
        coutの << BT-> データ; 
        順序どおり(BT - > rchild); 
    } 
} // 后序遍历二叉树 
テンプレート<型名データ型> ボイド BiTree <データ型> ::後順(BiNode <データ型> * BT)
{ 場合(BT == nullptr)
         のリターン;
    そうしないと

    



     
    {
        後順(BT - > lchild); 
        後順(BT - > rchild); 
        coutの << BT-> データ; 
    } 
} 

// 判断是否存在X 
テンプレート<型名データ型> BOOL BiTree <データ型> :: ExistX(BiNode <データ型> * BT、データ型X)
{ 場合(BT == nullptr)
         リターンそうであれば(BT->データ== X)
    { 戻り
    } 
    { 場合(ExistX(BT-> lchild、X))
             リターン

      
         
    
         ;
        もし(ExistX(BT-> rchild、x))が
             復帰 
    } 
    を返す 
} 

#endifの // BITREE_H_INCLUDED

 

main.cppにファイル

書式#include <iostreamの> 
の#include " BiTree.h " 
使用して 名前空間はstdを、

int型のmain()
{ 
    BiTree < チャー > T。
    CHAR CH; 
    cinを >> CH;
    もし(t.ExistX(CH)){ 
        COUT << " YES " 
    } 
    { 
        COUT << " NO " 
    } 
}

 

おすすめ

転載: www.cnblogs.com/DullRabbit/p/12558982.html