LeetCode 剑指 Offer 26. 树的子结构
题目描述
思路分析
思路描述
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 判断 B 是否是从 A 开始的子结构
func match(A, B *TreeNode) bool {
if B == nil {
return true // B 匹配完了
}
if A == nil || A.Val != B.Val {
return false
}
return match(A.Left, B.Left) && match(A.Right, B.Right)
}
// 判断 B 是否为 A 的子结构
func isSubStructure(A *TreeNode, B *TreeNode) bool {
if A == nil || B == nil {
return false
}
return match(A, B) || isSubStructure(A.Left, B) || isSubStructure(A.Right, B)
}
时间复杂度:O (m * n),其中 m 是树 A 的节点数,n 是树 B 的节点数。
最坏情况下需要遍历 A 的每个节点,并且在每个节点上都需要遍历 B。
空间复杂度:O (h),其中 h 是树 A 的高度,递归调用栈的空间复杂度。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用