-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path572.go
64 lines (61 loc) · 1.37 KB
/
572.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package main
//给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
//
//示例 1:
//给定的树 s:
//
// 3
// / \
// 4 5
// / \
// 1 2
//给定的树 t:
//
// 4
// / \
// 1 2
//返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
//
//示例 2:
//给定的树 s:
//
// 3
// / \
// 4 5
// / \
// 1 2
// /
// 0
//给定的树 t:
//
// 4
// / \
// 1 2
//返回 false。
//
//来源:力扣(LeetCode)
//链接:https://leetcode-cn.com/problems/subtree-of-another-tree
//著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
//一个树是另一个树的子树 则
//
//要么这两个树相等
//要么这个树是左树的子树
//要么这个树是右树的子树
func isSubtree(s *TreeNode, t *TreeNode) bool {
if s == nil && t == nil {
return true
}
if s == nil && t != nil {
return false
}
return isSameTree(s, t) || isSubtree(s.Left, t) || isSubtree(s.Right, t)
}
func isSameTree(p *TreeNode, q *TreeNode) bool {
if p == nil && q == nil {
return true
}
return p != nil && q != nil &&
p.Val == q.Val &&
isSameTree(p.Left, q.Left) &&
isSameTree(p.Right, q.Right)
}