BFSとDFSアルゴリズム

書式#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:深さ優先アルゴリズム、スタック、右のサブツリーをスタックは、サブツリースタックを残しました。

おすすめ

転載: www.cnblogs.com/EvansPudding/p/12607749.html
おすすめ