思路:显示遍历A树找到节点值和B的头节点值相等的节点,再去同时遍历A树和B树是否是相同的结构。
static boolean pre(Node rootA, Node rootB) {
boolean result = false;
// 判断当前遍历到的节点和节点B都不为null
if (rootA != null && rootB != null) {
// 如果他们的值相等,则判断B是否是A的子树
if (rootA.value == rootB.value)
result = subTree(rootA, rootB);
// 不是就继续判断左节点
if (!result)
result = pre(rootA.left, rootB);
// 还不是,再判断右节点
if (!result)
result = pre(rootA.right, rootB);
}
return result;
}
static boolean subTree(Node rootA, Node rootB) {
// 如果B先到了null,则说明上面的节点都符合
if (rootB == null)
return true;
// 如果A先到了null,B还不是,说明B非A的子树
if (rootA == null)
return false;
// 如果A、B值不想等,则不是
if (rootA.value != rootB.value)
return false;
// 以上判断都跳过的话,说明当前值与A的当前节点值相等,判断他们的子节点是否相等
return subTree(rootA.left, rootB.left) && subTree(rootA.right, rootB.right);
}