サブツリー:安全プラン18を証明します

タイトル説明

二つのバイナリ入力A、Bは、BはAさんを下部ではないと判断されます。(詩:私たちは、空のツリーは任意のサブ構造ツリーではありません同意しました)

問題解決のためのアイデア

Bは、子ノードとルートノードBが同じであると、これはノードBツリーをルートとするサブツリーとなり、比較が満足のルックアップで、サブツリー、直感的なアプローチを任意の順序でツリーをトラバースないことを確認成功し、そうでない場合は、ルックアップは失敗します。最も直感的なのツリー先行順走査は、ここで前順に、例えば、C ++実装コードを示します:

/ * 
構造体のTreeNode { 
    ヴァルをint型、
    ツリーノード構造体*左、
    ツリーノード構造体*右; 
    ツリーノード(INT X):
            右(NULL){(NULL)左ヴァル(X)、
    } 
}; * / 
クラスソリューション{
 パブリックBOOL HasSubtree(* pRoot1ツリーノード、ツリーノード* pRoot2)
    {        BOOL isSub = ;
            //は、任意の二つのツリーが空で表示され、falseを返す
           IF(pRoot1 pRoot2 = = NULL &&!NULL){
                IF(pRoot1->ヴァルをpRoot2- ==> ヴァル){ 
                   isSub =doesTree1HaveTree2(pRoot1、pRoot2)。
               } もし(!isSub){ 
                   isSub = HasSubtree(pRoot1-> 左、pRoot2)。
               } もし(!isSub){ 
                  isSub = HasSubtree(pRoot1-> 右、pRoot2)。
               } 
           } 
         戻りisSubと、
    } 
    BOOL doesTree1HaveTree2(ツリーノード* pRoot1、ツリーノード* pRoot2){
         場合(pRoot2 == NULL)は{
             返す 
        } 
        であれば(pRoot1 == NULL){
             リターン ; 
        } 
        もし(!pRoot1->ヴァル= pRoot2-> ヴァル){
             戻り 
        } 
        を返す(左pRoot1->左、pRoot2->)doesTree1HaveTree2 && doesTree1HaveTree2(pRoot1->右、pRoot2-> 右)。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/fancy-li/p/11616199.html