LeetCode 572.另一个树的子树

题目

给定两个非空二叉树 s 和 t,检验s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。

题目链接

示例

给定的树s:

     3
    / \
   4   5
  / \
 1   2

给定的树t:

   4 
  / \
 1   2

返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。

题目分析

如果st有且只有一树是空的,那么t不可能是s的子树。

if (s == NULL && t == NULL) return true;
if (s == NULL || t == NULL) return false;

如果ts的子树,有以下三种情况

  • s = t
  • ts的左子树的子树
  • ts的右子树的子树

以上三种情况成立一种即为真。

return isSametree(s, t) || isSubtree(s->left, t) || isSubtree(s->right, t);

如果s = t,必须同时满足以下三个条件

  • s->val == t->val
  • s->left = t->left
  • s->right = t->right
if (s->val == t->val){
    return isSametree(s->left, t->left) && isSametree(s->right, t->right);
}
else return flase;

题目解答

class Solution {
public:
    bool isSametree(TreeNode* s, TreeNode* t){
        if (s == NULL && t == NULL) return true;
        if (s == NULL || t == NULL) return false;

        if (s->val == t->val){
            return isSametree(s->left, t->left) && isSametree(s->right, t->right);
        }
        else return false;
    }

    bool isSubtree(TreeNode* s, TreeNode* t) {
        if (s == NULL && t == NULL) return true;
        if (s == NULL || t == NULL) return false;


        return isSametree(s, t) || isSubtree(s->left, t) || isSubtree(s->right, t);
    }
};

你可能感兴趣的:(LeetCode 572.另一个树的子树)