最后更新于
最后更新于
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
示例 1:
示例 2:
限制:
0 <= 节点个数 <= 10000
两个递归函数.
第一个递归函数是外层递归, 下面代码中的dfs
, 判断一个树是否是另一个树的子树. 终止条件为:
当 树 A 为空 或 树 B 为空 时,直接返回 false
递归逻辑为:
两个树的根节点的值不相同时, 判断B是否在A的左子树或右子树中
两个树的根节点值相等, 首先判断以A为根节点的子树, 是否包含树B
包含则找到了结果, 返回
没有包含, 则继续寻找, 判断B是否在A的左子树或右子树中
第二个递归函数是内层递归, 下面代码中的equal
, 判断树A包含当前根节点的子树, 是否包含树B. 终止条件为:
当节点 B 为空:说明树 B 已匹配完成(越过叶子节点),因此返回 true
当节点 A 为空:说明已经越过树 A 叶子节点,即匹配失败,返回 false
当节点 A 和 B 的值不同:说明匹配失败,返回 false
递归逻辑为:
判断A的左子树和B的左子树是否相等(包含), 且A的右子树和B的右子树是否相等(包含)