算法题---是否是另外一颗树的子树

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

示例 1:
给定的树 s:

3
/ \
4 5
/ \
1 2
给定的树 t:

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

示例 2:
给定的树 s:

3
/ \
4 5
/ \
1 2
/
0
给定的树 t:

4
/ \
1 2
返回 false。

// 两棵树,求t树是不是s树的子树
bool isSame(TreeNode *s, TreeNode *t){
    if(s==NULL && t==NULL){
        return true;
    }
    if(s==NULL || t==NULL){
        return false;
    }
    if(s->val != t->val){
        return false;
    }
    return (isSame(s->left, t->left) && isSame(s->right, t->right));
}

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

 

posted @ 2020-10-26 22:19  威威后花园  阅读(108)  评论(0编辑  收藏  举报