タイトル: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つのコースは、バイナリツリーまたはサブツリーの全てのノードが右サブツリーを残していません)