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

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

2.代码展示

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isSame(struct TreeNode* s, struct 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 isSubtree(struct TreeNode* s, struct TreeNode* t)
{
 	if (s == NULL)
    {
        return false;
    }

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

3.解题思路
首先是两个非空二叉树,所以当S为空时就返回false,S不是叶子结点时,我们就去判断它左右子树 的结构和数值是否和T的结构和数值相同,不相同就继续便利S的左右子树,直到结束。

发布了79 篇原创文章 · 获赞 6 · 访问量 3783

猜你喜欢

转载自blog.csdn.net/qq_41152046/article/details/104970276
今日推荐