0
点赞
收藏
分享

微信扫一扫

剑指 Offer 26. 树的子结构(递归)

Soy丶sauce 2022-03-12 阅读 60

思路

先序遍历树 A,判断树 A 中的每个节点x 为根的子树是否包含树 B。
上面这句话包含两个步骤:

  1. 先序遍历树 A 的每个节点
  2. 判断以树 A 的每个节点为根节点的子树是否包含 树 B

解法:

class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
    }
    // 判断 B 是否为树 A 的子树
    boolean recur(TreeNode A, TreeNode B) {
    	// B 已经匹配完,说明 B 是
        if(B == null) return true;
        // 树 A 已经走完或者值不相等,则不是子树
        if(A == null || A.val != B.val) return false
        // 递归对比当前树的左子树和右子树
        return recur(A.left, B.left) && recur(A.right, B.right);
    }
}

时间复杂度

在这里插入图片描述

举报

相关推荐

0 条评论