剑指 Offer 26. 树的子结构

1、题目内容

2、题目分析

本题是【对称二叉树】的引申,局部进行【二叉树对称的判定】,然后主二叉树逐步递归到各个分支逻辑,进行判定,进行二次循环递归逻辑。

【树的深度优先算法】

【搜索与回溯】是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。

3、代码实现

class Solution {
    //对称二叉树的判定引申到--> 子树是否是对称二叉树,二次递归

    //主函数递归,验证B是否是A的子树
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        if(B == null || A == null) return false;
        return check(A,B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
    }

    // dfs验证是否是对称树
    private boolean check(TreeNode A, TreeNode B){
        if(B==null) return true;
        if(A==null || A.val!=B.val) return false;
        return check(A.left, B.left) && check(A.right, B.right);
    }
}

时间复杂度 O(MN): 其中 M,N 分别为树 A 和 树 B 的节点数量;先序遍历树 A 占用 O(M) ,每次调用 recur(A, B) 判断占用 O(N) 。
空间复杂度 O(M): 当树 A 和树 B 都退化为链表时,递归调用深度最大。当  M≤N 时,遍历树 A 与递归判断的总递归深度为 M ;当 M>N 时,最差情况为遍历至树 A 叶子节点,此时总递归深度为 M。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值