Leetcode 572. Subtree of Another Tree(另一个树的子树)

注意本题要跟树的子结构区分开

Given tree A:

     3
    / \
   4   5
  / \
 1   2
    /
   0

Given tree B:

   4
  / \
 1   2

//树的子结构 Return true. (结构即可)
//子树问题 return false(树才行)

. Subtree of Another Tree
Given two non-empty binary trees s and t, check whether tree A has 
exactly the same structure and node values with a subtree of B.
A subtree of s is a tree consists of a node in A and all of this node's 
descendants. The tree A could also be considered as a subtree of itself.

Example 1:
Given treeA:

     3
    / \
   4   5
  / \
 1   2
 Given tree B:

   4 
  / \
 1   2

Return true 

Example 2:
Given tree A:

     3
    / \
   4   5
  / \
 1   2
    /
   0

Given tree B:

   4
  / \
 1   2

Return false. 
  • 看两个树是不是一样,然后再以两个子树为根节点
  • 为什么第2、3个要用主函数,因为如果两颗子树不相等,还要去下一级子树里面找,用子函数的话就直接截止了
  • 递归的出口:root==null
class Solution {
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root==null){
            return false;//递归的终点,到最后也没发现匹配的 ,直接返回
        }
        return issame(root,subRoot)||isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);
 
    }
    //判断两个树是不是相同,//仿镜像二叉树
    boolean issame(TreeNode root1,TreeNode root2){
        if(root1==null&&root2==null){
            return true;
        }
        if(root1==null||root2==null){
            return false;
        }
        if(root1.val!=root2.val){
            return false;
        }
        //这一句跟镜像二叉树不同
        return issame(root1.left,root2.left)&&issame(root1.right,root2.right);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值