LeetCode-剑指offer26-树的子结构

  |   0 评论   |   0 浏览

题目描述

输入两棵二叉树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)
}

运行结果:

image.png


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