力扣刷题 -- 572.另一颗树的子树
题目示例
思路分析
分析题目可以知道,另一颗子树就是原树木的一支分叉,就是包含关系。
那就是说既然要找分叉,那岂不是我的每一棵子树都要和subRoot进行比较,看是否完全相同?
思路大概是这么个样子,那感觉和上次说的判断相同的树是不是类似?只不过这里我每一个分叉就要和subRoot进行比较!!
话不多说,我们画图分析!
同样的我们也要处理特殊情况:
情况1:两棵树都为空树,满足要求
情况2:有一颗树为空树,不满足要求
代码实现
typedef struct TreeNode TreeNode;bool sameTree(struct TreeNode* root, struct TreeNode* subRoot){if(root==NULL && subRoot==NULL){return true;}if(root==NULL && subRoot!=NULL){return false;}if(root!=NULL&& subRoot==NULL){return false;}if(root->val != subRoot->val){return false;}return sameTree(root->left,subRoot->left) && sameTree(root->right,subRoot->right);}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {if(root==NULL){return false;}if(sameTree(root,subRoot)){return true;}return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}