题目
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
思路
首先找到A中节点值等于B根节点的节点,然后递归判断,如果false,继续找相等的节点,直到找不到
要注意A中可能不止一个相等的节点,所以要遍历A中所有节点,直到返回true,否则,返回false
代码
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
bool ans=false;
if(A&&B){#保证A和B都非空
if(A->val==B->val)
ans=f(A,B);
if(!ans)#如果返回false,左子树继续找相等节点
ans=isSubStructure(A->left,B);
if(!ans)#右子树继续找相等节点
ans=isSubStructure(A->right,B);
}
return ans;
}
bool f(TreeNode *A,TreeNode *B){
if(!B)
return true;
if(!A)
return false;
if(A->val!=B->val)
return false;
return f(A->left,B->left)&&f(A->right,B->right);#刚进入函数都是相等的,判断左子树和
#右子树是否相等,直到把B所有节点判断完
}
};