[2021校招必看之Java版《剑指offer》-58] 树的子结构

1、题目描述

  【JZ17】输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
  知识点:树,递归
  难度:二星

2、解题思路

  树的子结构定义:有两棵树 A 和 B,如果 A 中能找到和 B 一模一样的部分,则称 B 为 A 的子结构。如下图所示:
[2021校招必看之Java版《剑指offer》-58] 树的子结构
  并且,空树不是任何树的子结构。

  解决思路有两步:
  1、在树 A 中找到和树 B 根节点值相同的结点,设为结点 X;
  2、判断这个结点 X 的左子树是否包含树 B 的左子树,接着判断结点 X 的右子树是否包含树 B 的右子树。

  可见,这两步对应着两个递归。

  第一个递归是从树 A 中遍历,找出和树 B 根节点相同的结点 X;
  第二个递归是在找到了结点 X 的前提下,分别比较树 X 的左右子树是否包含了树 B 的左右子树。

  如果第二个递归中间有一步失败了,则重写找结点 X,若找结点