對於兩棵彼此獨立的二叉樹A和B,請編寫一個高效算法,檢查A中是否存在一棵子樹與B樹的拓撲結構完全相同。
給定兩棵二叉樹的頭結點A和B,請返回一個bool值,代表A中是否存在一棵同構於B的子樹。
本題可以從根節點一個一個進行比較,但時間複雜度爲O(M*N);
選擇用數組進行判斷,先把兩個樹用相同方式序列化,如果StrA包含StrB,則B樹是A樹的子樹。
public static boolean chkIdentical(TreeNode A, TreeNode B) {
// write code here
String strA = serialize(A);
String strB = serialize(B);
if (strA.contains(strB)) {
return true;
} else {
return false;
}
}
public static String serialize(TreeNode tree){
if(tree==null){
return "#!";
}
String res=tree.val+"!";
res+=serialize(tree.left);
res+=serialize(tree.right);
return res;
}