題目描述
對於兩棵彼此獨立的二叉樹A和B,請編寫一個高效算法,檢查A中是否存在一棵子樹與B樹的拓撲結構完全相同。
給定兩棵二叉樹的頭結點A和B,請返回一個bool值,代表A中是否存在一棵同構於B的子樹。
判斷A中是否存在一顆子樹與B相同。
可以先將A和B都轉化爲同一遍歷順序下的字符串,空指針用#填充
再判斷A中有沒有子字符串是B
可以直接調用String中contains方法,也可以寫一個KMP算法
重點是,將樹問題轉化爲字符串問題
貼代碼
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public class IdenticalTree {
public boolean chkIdentical(TreeNode A, TreeNode B) {
// write code here
String treeString1 = getTreeString(A);
String treeString2 = getTreeString(B);
return treeString1.contains(treeString2);
}
public static String getTreeString(TreeNode root){
if (root == null){
return "#";
}
return root.val + getTreeString(root.left) + getTreeString(root.right);
}
}