LeetCode 572. 另一棵树的子树
题目描述
思路分析
思路描述
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func isSubtree(s *TreeNode, t *TreeNode) bool {
if s == nil {
return false
}
if isSameTree(s, t) {
return true
}
return isSubtree(s.Left, t) || isSubtree(s.Right, t)
}
func isSameTree(s *TreeNode, t *TreeNode) bool {
if s == nil && t == nil {
return true
}
if s == nil || t == nil {
return false
}
return s.Val == t.Val && isSameTree(s.Left, t.Left) && isSameTree(s.Right, t.Right)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 判断两棵树是否相同
func isSameTree(t1, t2 *TreeNode) bool {
if t1 == nil && t2 == nil {
return true
}
if t1 == nil || t2 == nil {
return false
}
return t1.Val == t2.Val && isSameTree(t1.Left, t2.Left) && isSameTree(t1.Right, t2.Right)
}
// 判断 subRoot 是否是 root 的子树
func isSubtree(root *TreeNode, subRoot *TreeNode) bool {
if root == nil {
return false
}
// 如果当前节点和 subRoot 相同,则判断它们是否是完全相同的树
if isSameTree(root, subRoot) {
return true
}
// 否则,递归检查左子树和右子树
return isSubtree(root.Left, subRoot) || isSubtree(root.Right, subRoot)
}
时间复杂度:O (n * m),其中 n 是
root
的节点数,m 是subRoot
的节点数。最坏情况下,我们需要遍历
root
的每个节点,并在每个节点处比较subRoot
。空间复杂度:O (h),其中 h 是树的高度,主要用于递归调用栈的空间。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用