2つの非常に大きなツリーがあります。数百万のノードを持つT1と、数百のノードを持つT2です。T2がT1のサブツリーであるかどうかを判断するためのアルゴリズムを作成します
著者は、力ずくの検索ソリューションを提供します。ノードごとに比較するだけです。コードは次のとおりです。
boolean containsTree(TreeNode t1, TreeNode t2) {
if (t2 == null) return true;
else return subTree(t1, t2);
}
boolean subTree(TreeNode r1, TreeNode r2) {
if(r1 == null)
return false;
if(r1.data = r2.data){
if(matchTreee(r1, r2)) return true;
}
return ( subTree(r1.left, r2) || subTree(r1.right, r2) );
}
boolean matchTree(TreeNode r1, TreeNode r2){
if (r2 == null && r1 == null)
return true;
if (r1 == null || r2 == null)
return false; //big tree empty & subtree still not found
if (r1.data != r2.data)
return false;
return (matchTree(r1.left, r2.left) && matchTree(r1.right, r2.right));
}
上記のコードでは、関数の基本ケースに同意しませんmatchTree
if (r2 == null && r1 == null)
return true;
if (r1 == null || r2 == null)
return false; // big tree empty & subtree still not found
私の理解によれば、基本的なケースは次のようになります。
if(r2 == null) return true; //if r2 is null, r2 must match r1
no matter r1 is null or not
if(r1 == null) return false; //r1 == null means big tree empty
and we already know r2 != null, so r2 must not match r1.
確認を手伝ってもらえますか?
ありがとう、