题目
题目描述
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
给定的树 A:
3 |
给定的树 B:
4 |
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
示例1
输入: A = [1,2,3], B = [3,1]
输出: false
示例2
输入: A = [3,4,5,1,2], B = [4,1]
输出: true
题解
递归+DFS
遍历两棵树,左右子树分别递归判断是否为子结构。
若B树为A树的子结构,则有如下三种情况:
A树与B树
完全相等- A的
左子树
与B树完全相等 - A的
右子树
与B树完全相等
DFS搜索两树是否相等:
- 若A树为空,返回False;若B树为空,则说明B树为A树子结构,返回True;
- 两棵树都不为空,则需比较如下三种情况:
- A的
根节点
与B的根节点是否相同 - A的
左子树
与B的左子树是否相同 - A的
右子树
与B的右子树是否相同
时间复杂度:O(mn),先序遍历树A占用O(m),每次调用DFS判断占用O(n);
空间复杂度:O(m),递归占用额外空间。
# Definition for a binary tree node. |