剑指 Offer 26. 树的子结构
题目
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
//递归哦,不要想太多细节
//A的左子树包含B或A的右子树包含B
return (A != nullptr && B != nullptr) && (recur(A, B) || isSubStructure(A->left, B)
|| isSubStructure(A->right, B));
}
//以A为根节点的子树包含树B
bool recur(TreeNode* A, TreeNode* B) {
//表示匹配完成
if(B == nullptr) {
return true;
}
if(A == nullptr || A->val != B->val) return false;
//在A与B当前节点值相同的情况下,递归判断他们的左右子节点
return recur(A->left, B->left) && recur(A->right, B->right);
}
};