该题目来源于牛客网《剑指offer》专题。
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
Go语言实现:
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
//b是否和a的跟结点或左子树的跟结点或右子树的跟结点一致
func hasSubtree(a *TreeNode, b *TreeNode) bool {
return isSubtree(a, b) || hasSubtree(a.Left, b) || hasSubtree(a.Right, b)
}
//除了跟结点,其他结点是否也一致
func isSubtree(a *TreeNode, b *TreeNode) bool {
if b == nil || a == nil {
return false
}
if a.Val == b.Val {
return isSubtree(a.Left, b.Left) && isSubtree(a.Right, b.Right)
} else {
return false
}
}