题意理解
判断一个树是不是另一个树的子树
问题分析
用两次递归,第一个递归用来查找当前子树的根等于另一个树的根,第二个递归用来判断根相等的两个树是否包含。
1009:比较固定到同根的情况,遍历不同根的情况
其他
链接
bool isSubtree(TreeNode* s, TreeNode* t) {
bool flag=false;
if(s && t) { //两棵树都存在的情况
//cout << s->val << '\t' << t->val << endl;
if(s->val==t->val) { //相等
flag=DoesTree1haveTree2(s, t); //判断当前树是不是一样
}
if(!flag) { //不相等,继续
flag=isSubtree(s->left, t) || isSubtree(s->right, t); //左子树是不是相等,右子树是不是相等
}
}
return flag;
}
bool DoesTree1haveTree2(TreeNode* s, TreeNode* t) {
if(!s && !t) return true; //空树相等
if(!s || !t) return false; //仅有一个空树不等
if(s->val!=t->val) return false; //根值不等,不相等
//cout << s->val << '\t' << t->val <left, t->left) //递归判断左子树+右子树
&& DoesTree1haveTree2(s->right, t->right);
}