安全プランを証明する:サブツリー(javaの)

タイトル:2つのバイナリ入力AとB、Bは、決定したサブ構造Aさんではありません。

Aサブツリー構造の一部とBは同じであるので、サブ構造のAがBであるので、例えば、2つのバイナリツリーは、図に示します


場合ツリー、実際にはツリーの先行順走査でツリーAにルートノードの同一の値を見つけるために:Bツリー及びサブツリー構造ならびにAがあるかどうかを見つけるために、アイデアは、最初のステップでありますAおよびBは空のツリー出力対応する定義されています。値BとノードのヘッドノードツリーAツリーが同じである場合、それはdoesTree1HaveTree2、メイク決意に第二の工程と呼ばれます。第二のステップは、決定木Rにあるサブツリーのルート付きツリーではなく、Bを考慮する再帰的方法を用いて、同一の構造を有している:もし、ツリーのルートノードRと同一でない場合はBが偽です、そうである場合、そのノードの周囲に再帰的に決定される値は同じではありません。私たちは、再帰木の終了条件Aに到着またはBは、ツリーのリーフノードです。

  public boolean hasSubTree(BinaryTreeNode root1,BinaryTreeNode root2){  
        if(root2 == null)  
            return true;  
        if(root1 == null)  
            return false;  
        boolean result = false;  
          
        if(root1 != null && root2 != null){  
            if(root1.value == root2.value)  
                result = doesTree1HaveTree2(root1,root2);  
            if(!result)  
                result = hasSubTree(root1.leftNode,root2);  
            if(!result)  
                result = hasSubTree(root1.rightNode ,root2);  
        }  
        return result;  
    }  
    public boolean doesTree1HaveTree2(BinaryTreeNode root1,BinaryTreeNode root2){  
        if(root2 == null)  
            return true;  
        if(root1 == null)  
            return false;  
        if(root1.value != root2.value)  
            return false;  
        return doesTree1HaveTree2(root1.leftNode,root2.leftNode) && doesTree1HaveTree2(root1.rightNode,root2.rightNode);  
    }  
テストケース:

の機能試験(ツリーA及びBは、通常の二分木であり、ツリーはBツリー部分構造Aであるか否か)

特別なテスト入力(バイナリまたはNULLへの2つのルート・ポインタの2つのコースは、バイナリツリーまたはサブツリーの全てのノードが右サブツリーを残していません)

公開された118元の記事 ウォン称賛35 ビュー120 000 +

おすすめ

転載: blog.csdn.net/abc7845129630/article/details/52724765