对于两棵彼此独立的二叉树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); } }