[二叉树][dfs]leetcode572:另一个树的子树(easy)

题目:

572. 另一个树的子树

题解:

  • 两层递归,第一层递归,来确定t与s相等,还是t是s的左子树或s的右子树。第二层递归,判断这两棵树是否相等。
  • 一棵树是另一颗树的子树:要么这两棵树相等;要么这棵树是另一棵树的左子树;要么这棵树是另一颗树的右子树。

代码如下:

class Solution {
public:
    //一棵树是另一颗树的子树:要么这两棵树相等;要么这棵树是另一棵树的左子树;要么这棵树是另一颗树的右子树
    bool isSubtree(TreeNode* s, TreeNode* t) {
        if(!s&&!t)return true;//t、s都为空,这两棵树相等
        if(!s&&t)return false;//s为空,t不为空,t不为s的子树,返回false
        if(isSameTree(s,t))return true;//判断两棵树是否相等
        return isSubtree(s->left,t)||isSubtree(s->right,t);//判断t是否为s的左子树或右子树
    }

    bool isSameTree(TreeNode* s,TreeNode* t){
        if(!s&&!t)return true;//s、t都为空,返回true
        if(!s||!t)return false;//s、t有一个为空,返回false
        if(s->val!=t->val)return false;
        //递归s、t左右子树是否相等
        return isSameTree(s->left,t->left)&&isSameTree(s->right,t->right);
    }
};
发布了484 篇原创文章 · 获赞 149 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/103916611
今日推荐