リストは、バイナリツリーアルゴリズムを決定される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 " 。 } }