leetcode 剑指offer26 树的子结构
思路:
- 深度优先遍历,B 树要么是 A 本身,要么是 A 左子树,要么是 A 的右子树;
- 当 B 树(子结构树)为空时,是树的子结构;
- 如果 B 树 不为空,A 树 为空时,则不是子结构;
- 如果 A 树 B 树 都不为空,但结点值不同,则不是子结构;
- 在本层满足后,再分别检查两个树的左右子孩子;
题解:
class Solution {
public:
bool compare(TreeNode* A, TreeNode* B) {
if(B == NULL) return true;
if(A == NULL) return false;
if(A->val != B->val) return false;
return compare(A->left, B->left) && compare(A->right, B->right);
}
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(B == NULL) return false;
if(A == NULL) return false;
return compare(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);
}
};