返回值为bool类型的题目,不一定直接return true;也可能return一个判断语句。附上大佬的力扣题解
先序遍历+判断
/**
* 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 judge(TreeNode*A,TreeNode*B){
if(!B){
return true; //为什么返回true,因为B结点遍历完了
}
if(!A || A->val!=B->val){
return false; //结点不匹配,当然是false
}
return judge(A->left,B->left)&&judge(A->right,B->right); //严格判断接下来的结构是否一致
}
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(!A || !B){
return false; //空树
}
//下面是先序遍历,判断当前节点B是否是A的子结构,充分利用||的中断性质,转化为判断小问题:只需关注当前根结点,左结点,右结点
return judge(A,B) || isSubStructure(A->left,B) || isSubStructure(A->right,B);
}
};