判断t1树中是否有与t2树完全相同的子树

描述

给定彼此独立的两棵二叉树,树上的节点值两两不同,判断 t1 树是否有与 t2 树完全相同的子树。

示例1

输入:

{1,2,3,4,5,6,7,#,8,9},{2,4,5,#,8,9}

返回值:

true

备注:

1≤n≤500000

方法一:递归
要判断t2是否为t1的子树,那么就先在t1中找到t2的根节点,然后再进行遍历判断从当前节点的左右子树相不相同,如果一旦出现不同,那么立即返回false。
如果t2遍历完节点,t1也遍历完节点,则证明t2为t1的子树。
如果t1先遍历完节点,t2还没遍历完节点,那么则证明t2不是t1的子树。

public boolean isContains (TreeNode root1, TreeNode root2) {
        // 如果当前节点为空,那么则t2不可能为t1的子树了
        if(root1 == null)
            return false;
        // 递归寻找t1树中跟t2根节点相同的节点,即找到图中紫色圈的节点
        /* 三种可能,1、当前节点的左节点跟t2根节点相同
                    2、当前节点的右节点跟t2根节点相同
                    3、当前节点跟t2根节点相同
        */
        return isContains(root1.left,root2) || isContains(root1.right,root2)
            || check(root1,root2); 
    }

    pub
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值