?LeetCode刷題實(shí)戰(zhàn)572:另一棵樹的子樹
示例


解題
class?Solution?{
public:
????bool isSubtree(TreeNode* root, TreeNode* subRoot) {
????????if(root==NULL||subRoot==NULL)
????????????return?false;
????????if(root->val!=subRoot->val){
????????????return?isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
????????}else{
????????????// return judge(root,subRoot);
????????????return?judge(root,subRoot)||isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot); // 這是為了應(yīng)對(duì)出現(xiàn)有重復(fù)元素出現(xiàn)的情況,比如root: 1 1, subroot:1
????????}
????????return?false;
????}
????bool judge(TreeNode* root1, TreeNode* root2){
????????// 這是用來判斷子樹的
????????if(root1==NULL&&root2==NULL) // 兩個(gè)都為空,說明比對(duì)完了,返回true
????????????return?true;
????????if(root1==NULL||root2==NULL) // 其中一個(gè)為空,說明一個(gè)比完,一個(gè)還有,返回false
????????????return?false;
????????// 如果是判斷子結(jié)構(gòu)的就用下面這種方式
????????// if(root2==NULL)
????????// return true;
????????// if(root1==NULL) // 此時(shí)肯定root2不為null,root1為null,所以false;
????????// return false;
????????if(root1->val!=root2->val)
????????????return?false;
????????else?
????????????return?judge(root1->left,root2->left)&&judge(root1->right, root2->right);
????}
};
