LKJZ26-树的子结构
分治递归
class Solution {
public:
bool issametree(TreeNode*A,TreeNode*B){
//递归终止条件
//AB都为空√
if(A==nullptr&&B==nullptr){
return true;
}
//A不为空B为空√
if(A!=nullptr&&B==nullptr){
return true;
}
//A为空B不为空×
if(A==nullptr&&B!=nullptr){
return false;
}
//AB节点的值不同×
if(A->val!=B->val){
return false;
}
//AB节点的值相同继续递归
//条件为&&
return issametree(A->left,B->left)&&issametree(A->right,B->right);
}
bool isSubStructure(TreeNode* A, TreeNode* B) {
//A和B有一棵为空树,规定空树不是任意一棵树的子结构
if(A==nullptr||B==nullptr){
return false;
}
//A和B相同
if(A->val==B->val&&issametree(A,B)){
return true;
}
//递归A的左子树和右子树,有一棵return true就行,所以是||
return isSubStructure(A->left,B)||isSubStructure(A->right,B);
}
};