書式#include <ベクトル> の#include <iostreamの> の#include <スタック> の#include <キュー> 使用して 名前空間をSTD。 構造体BitNode { int型データ; BitNode * *、左、右、 BitNode(int型 X):データ(X)、左(0)、右(0 ){} }。 無効作成(BitNode *&ルート) { int型のキー。 cinを >> キー。 もし(キー== - 1 ) ルート = NULL; そうしないと { ルート = 新しいBitNode(キー); (ルート作成 - > ;左) 作成します(ルート - > 右)。 } } 空 PreOrderTraversal(BitNode * ルート) { もし(ルート) { coutの << root->データ<< " " ; PreOrderTraversal(ルート - > 左)。 PreOrderTraversal(ルート - > 右)。 } } // 深さ優先探索 // スタックを使用し、今サブツリーを押した後、左の部分木プッシュする のボイド深さ優先探索を(BitNode * ルート) { スタック <BitNode *> nodeStack。 nodeStack.push(ルート)。 しばらく(!nodeStack.empty()) { BitNode *node = nodeStack.top(); coutの <<ノード- >データ<< ' ' ; nodeStack.pop(); もし(ノード- > 右) { nodeStack.push(ノード - > 右)。 } もし(ノード- > 左) { nodeStack.push(ノード - > 左)。 } } } // BFS 無効幅優先探索(BitNode * ルート) { キュー <BitNode *> nodeQueue。 nodeQueue.push(ルート)。 しばらく(!nodeQueue.empty()) { BitNode *ノード= nodeQueue.front()。 coutの <<ノード- >データ<< ' ' ; nodeQueue.pop(); もし(ノード- > 左) { nodeQueue.push(ノード - > 左)。 } もし(ノード- > 右) { nodeQueue.push(ノード - > 右)。 } } } int型 のmain() { BitNode *ルート= NULL; (ルート)を作成します。 // プレオーダートラバーサル PreOrderTraversal(ルート); // 深さ優先トラバーサル COUT << ENDL << " DFS " << ENDL。 深さ優先探索(ルート)。 // BFS はcout <<てendl << " BFS " << てendl; 幅優先探索(ルート)。 }
BFS:幅優先アルゴリズムは、キューを介して、チームがチームにサブツリー、右部分木を残しました。
DFS:深さ優先アルゴリズム、スタック、右のサブツリーをスタックは、サブツリースタックを残しました。