二叉树之-比较两数是否相同与B树是否是A树的子结构

二叉树之-比较两数是否相同与B树是否是A树的子结构

最近刷题时遇到判断B树是否是A树的子结构的问题,总结一下思路和与判断两树是否完全相同的区别

思路

  • 判断两树是否完全相同的思路:
 if(A==null&&B==null) return true;
        if(A!=null&&B!=null&&A.val==B.val)
        {
          return compareStructure(A.left,B.left)&&compareStructure(A.right,B.right);
        }
        return false;

2.判断以节点B为根节点的树是否是以节点A为根节点的树的子结构

public static boolean isSub(TreeNode tree1, TreeNode tree2) {
        if (tree2 == null) {
            return true;}
         // 如果tree2为null了,说明是其子结构,
         //因为tree2整个树都已经和tree1的某颗子树进行了完整比较,且都相同
      
        if (tree1.val != tree2.val) {
            return false;}
        // 此时tree1和tree2两颗树相同节点的值不相同,说明tree2不是tree1的子结构
        if (tree1 == null) {// 此时tree1已经没有可用于比较的节点,而tree2还有未比较的节点,说明树2不是树1为根节点的子结构
            return false;
        }
        // 上述条件都未满足,则继续判断当前节点的左子树和右子树是否相等
        return isSub(tree1.left, tree2.left) && isSub(tree1.right, tree2.right);
    }

3.总结:

  • 比较同样是比较以A,B为根节点的两树是否相等与一树是否是另一个树的子结构的思路区别在于要考虑到B=null的情况。

  • 如果比较两树是否完全相同:当A和B只有一个=null时,就返回false;

  • 而比较一树是否是另一个树的子结构:此时B可能只是A的一部分, 根节点相同,但相比于A B的结构可能少一部分,所以当B的所有节点都比较完但没出现false的情况,即为true了;而此时可能A尚有未比较的节点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值