思路
- 首先判断两棵树是否为空,如果其中一颗为空,直接返回false,如果不为空,继续
- 判断 A 树根节点和 B 树跟节点是否相同,如果相同,判断 B 是否有孩子,如果没有孩子,直接返回 true;如果有孩子,判断其左右子树与 A 是否相同,如果左右子树相同,返回true,如果不同,返回false;如果跟节点不同,判断 A 的左右子树是否有和 B 根节点相同的结点,如果有,递归判断,如果没有,返回 false。
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function HasSubtree(pRootA, pRootB)
{
// write code here
if (!pRootA || !pRootB) return false;
return isSubtree(pRootA, pRootB) || HasSubtree(pRootA.left, pRootB) || HasSubtree(pRootA.right, pRootB);
}
function isSubtree(rootA, rootB) {
if (!rootB) {
return true;
}
if (!rootA) {
return false;
}
if (rootA.val === rootB.val) {
return isSubtree(rootA.left, rootB.left) && isSubtree(rootA.right, rootB.right);
} else {
return false;
}
}