题链接:leetcode-cn.com/problems/sh…
解题分析:
此解法效率不高 题目要求找 B是否为A的子树节点,且不为空树节点,故我们判断A或者B为空直接返回false, 判断B是否为A的子树节点,采用递归解法,我们首先判断有几种情况
情况如下:
- A为空,B还有值 // 返回false
- B为空 // 说明已经找完了,并且没有出现A.val !== B.val 的情况,所以为true
- A.val !== B.val // false
从这几种情况分析, 我们递归整棵树,直到符合true或者false
function isSubStructure(A, B) {
// 题目要求的约定空树不是任意一个树的子结构,也就是说A B两颗树中任一一颗是空树则返回false
if (!A || !B) return false
return someNode(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B)
}
function someNode(a, b) {
// 一直找到子树b为空都没有发现a.val !== b.val的情况,那么就确定确实存在这颗子树了
if (b ===null){
return true
}
// 如果找到a没有节点可查了, b还有,必然不是a的子节点
if (a ===null) {
return false
}
// 如果值不同, 必然不是子节点
if (a.val !== b.val){
return false
}
// 查找整棵树
return someNode(a.left, b.left) && someNode(a.right, b.right)
}