572. 另一棵树的子树

这篇博客详细介绍了如何解决LeetCode上的‘子树’问题,提供了一个使用递归的Java解决方案,通过比较根节点和子树节点的值及结构来判断是否存在子树。同时,文章还提及了相关题目,如对称二叉树和相同的树,帮助读者巩固二叉树操作的知识。
摘要由CSDN通过智能技术生成

https://leetcode-cn.com/problems/subtree-of-another-tree/
在这里插入图片描述

思路
s 中包含和 t 具有相同结构和节点值的子树意味着s中存在一个节点s1,其大小和t相等,同时s1的左子树和t的左子树相同且s1的右子树和t的右子树相同。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        //这个就是先判断是否是树相等,
        //然后判断root的左右子树,是否与subRoot相等
        /*
            首先判断节点值是否相等
            如果相等,那么久判断2个树是否相等
            如果不相等,那就遍历root的左右子树,然后找值相等,和其余节点相等
         */
        //确认递归参数和返回值
        if(root==null) return false;
        if(subRoot==null) return true;
        return compare(root,subRoot)||isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);
    }
     public boolean compare(TreeNode root, TreeNode subRoot){
            //确认终止条件
            //如果值相等,那么久
            //首先排除错误的
            if(root==null&&subRoot==null)
                return true;
            if(root==null||subRoot==null)
                return false;
            /**
                两个都不为空,然后看值是否相等
             */
            if(root.val!=subRoot.val)
                return false;
            /**
                接下来,就是节点不都为空,值也相等的情况了
             */
            boolean leftside=compare(root.left,subRoot.left);
            boolean rightside=compare(root.right,subRoot.right);
            boolean isSame = leftside && rightside;
            return isSame;

        }
}

相关题目
101. 对称二叉树
100.相同的树

https://blog.csdn.net/Subuprogrammer/article/details/105693709

https://blog.csdn.net/li975242487/article/details/91989406

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值