力扣572:另一棵树的子树

给你两棵二叉树 rootsubRoot检验 root是否包含subRoot 具有相同结构节点值的子树。如果存在返回 true ;否则,返回 false

二叉树 tree一棵子树包括 tree某个节点这个节点的所有后代节点tree可以看做它自身的一棵子树。

示例 1:

在这里插入图片描述

输入root = [3,4,5,1,2], subRoot = [4,1,2]
输出true
示例 2:

在这里插入图片描述

输入root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
输出false

提示

root 树上的节点数范围[1, 2000]
subRoot 树上的节点数量范围是 [1, 1000]
-104 &lt;= root.val <= 104
-104 <= subRoot.val <= 104

递归思想

遍历根节点的左子树和右子树,在左子树和右子树中找是否相同的子树

如果根节点为空,则返回false,如果存在相同的树,则返回true

这里需要一个判断相同函数判断相同小编在之前也写过–&gt;力扣100:相同的树

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(p==NULL&amp;&amp;q==NULL)
        return true;
    
    if(p==NULL||q==NULL)
        return false;
    
    if(p-&gt;val!=q-&gt;val)
        return false;

    return isSameTree(p-&gt;left,q-&gt;left)&amp;&amp;isSameTree(p-&gt;right,q-&gt;right);
}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)
        return false;
    
    if(isSameTree(root,subRoot))
        return true;
    
    return isSubtree(root-&gt;left,subRoot)||isSubtree(root-&gt;right,subRoot);
}

原文地址:https://blog.csdn.net/weixin_73397765/article/details/134769585

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45906.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注