两树对称

bool isSymmetric(TreeNode* root) {
    if (!root) return true;
    return isSymmetric(root->left, root->right);
}

bool isSymmetric(TreeNode *left, TreeNode *right) {
    if (!left && !right) return true;
    if (!left || !right) return false;
    return left->val == right->val
        && isSymmetric(left->left, right->right)
        && isSymmetric(left->right, right->left);
}

是另一棵的子树

bool isSubtree(TreeNode* s, TreeNode* t) {
    if (!t) return true;
    if (!s) return false;
    if (s->val == t->val && isSame(s, t)) return true;
    return isSubtree(s->left, t) || isSubtree(s->right, t);
}

bool isSame(TreeNode* s, TreeNode* t) {
    if (!s && !t) return true;
    if (!s || !t) return false;
    if (s->val != t->val) return false;
    return isSame(s->left, t->left) && isSame(s->right, t->right);
}