LeetCode-剑指offer26-树的子结构
题目描述
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
给定的树 A:
     3
    / \
   4   5
  / \
 1   2
给定的树 B:
   4 
  /
 1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
示例 1:
输入:A = [1,2,3], B = [3,1]
输出:false
示例 2:
输入:A = [3,4,5,1,2], B = [4,1]
输出:true
限制:
0 <= 节点个数 <= 10000
解法
利用递归的思想解决。用A的根节点、左节点、右节点依次尝试是否等B的根节点,如果是则尝试对比下一个节点
go代码如下:
func isSubStructure(A *TreeNode, B *TreeNode) bool {
    if A == nil || B == nil {
        return false
    }
    return dfs(A, B) || isSubStructure(A.Left, B) || isSubStructure(A.Right, B)
}
func dfs(A *TreeNode, B * TreeNode) bool {
    if B == nil {
        return true
    }
    if A == nil {
        return false
    }
    return A.Val == B.Val && dfs(A.Left, B.Left) && dfs(A.Right, B.Right)
}
运行结果:

标题:LeetCode-剑指offer26-树的子结构
作者:guobing
地址:http://www.guobingwei.tech/articles/2020/10/25/1603627682844.html