题目描述
输入两棵二叉树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
解题思路
1.AB为空就是错误
2.然后验证当前值,左节点,右节点,有一个成功就是正确
3.在判断环节,只要B为空就是正确,注意不能先判断A,因为AB可能都为空,A为空是错误,B为空是正确,所以先判断B
4.不相等也为错误
提交结果
package main
import "fmt"
func main() {
// head := new(TreeNode)
// head.Val = 1
// left1 := new(TreeNode)
// left1.Val = 2
// right1 := new(TreeNode)
// right1.Val = 3
// head.Left = left1
// head.Right = right1
// left2 := new(TreeNode)
// left2.Val = 4
// // right2 := new(TreeNode)
// // right2.Val = 2
// left1.Left = left2
// // left1.Right = right2
// head2 := new(TreeNode)
// head2.Val = 3
// // left3 := new(TreeNode)
// // left3.Val = 1
// // head2.Left = left3
head := new(TreeNode)
head.Val = 4
left1 := new(TreeNode)
left1.Val = 2
right1 := new(TreeNode)
right1.Val = 3
head.Left = left1
head.Right = right1
left2 := new(TreeNode)
left2.Val = 4
Right2 := new(TreeNode)
Right2.Val = 5
left1.Left = left2
left1.Right = Right2
Left3 := new(TreeNode)
Left3.Val = 6
Right3 := new(TreeNode)
Right3.Val = 7
right1.Left = Left3
right1.Right = Right3
Left4 := new(TreeNode)
Left4.Val = 8
Right4 := new(TreeNode)
Right4.Val = 9
left2.Left = Left4
left2.Right = Right4
head2 := new(TreeNode)
head2.Val = 4
left21 := new(TreeNode)
left21.Val = 2
right21 := new(TreeNode)
right21.Val = 3
head2.Left = left21
head2.Right = right21
fmt.Println(isSubStructure(head, head2))
}
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func isSubStructure(A *TreeNode, B *TreeNode) bool {
return A != nil && B != nil && (recur(A, B) || isSubStructure(A.Left, B) || isSubStructure(A.Right, B))
}
func recur(A *TreeNode, B *TreeNode) bool {
if B == nil {
return true
}
if A == nil || A.Val != B.Val {
return false
}
return recur(A.Left, B.Left) && recur(A.Right, B.Right)
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。