题目:剑指 Offer 26. 树的子结构
分析
- 根据题意空树不是任意一个树的子结构,可以知道当A或B为空时,返回false;
- 递归的在A树中找B树是不是子结构、在A树的左子树中找B树是不是子结构、在A树的右子树中找B树是不是子结构
怎么判断是不是子结构?
- 如果b树都找完了,都没有发现b树中的任何值与a树不相等,则确定是子结构
- 如果b树非空而a树已空,则肯定不是子结构
- 比较当前节点值时,不相等则肯定不是子结构
- 分别在左右子树中递归去寻找
function isSubStructure(A, B) {
if (A == null || B == null) return false;
return dfs(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
function dfs(A, B) {
// B树找完了,没有发现不相等的,返回true;
if (B == null) {
return true;
}
if (A == null) {
return false;
}
return A.val == B.val && dfs(A.left, B.left) && dfs(A.right, B.right);
}