LeetCode 101. 对称二叉树
题目描述
思路分析
递归
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 判断两个节点是否镜像对称
func isMirror(left *TreeNode, right *TreeNode) bool {
if left == nil && right == nil {
return true
}
if left == nil || right == nil {
return false
}
if left.Val != right.Val {
return false
}
// 递归判断
return isMirror(left.Left, right.Right) && isMirror(left.Right, right.Left)
}
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
return isMirror(root.Left, root.Right)
}
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
// 判断是否是对称树
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
// 判断两个子树是否镜像
var isMirror func(p *TreeNode, q *TreeNode) bool
isMirror = func(p *TreeNode, q *TreeNode) bool {
// 都为空说明对称
if p == nil && q == nil {
return true
}
// 有一个为空说明不对称
if p == nil || q == nil {
return false
}
// 当前节点值不同,不对称
if p.Val != q.Val {
return false
}
// 递归判断 左-右 和 右-左
return isMirror(p.Left, q.Right) && isMirror(p.Right, q.Left)
}
return isMirror(root.Left, root.Right)
}
- 时间复杂度:O (n),其中 n 是节点的数量。
- 空间复杂度:O (h),其中 h 是树的高度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
queue := []*TreeNode{root.Left, root.Right}
for len(queue) > 0 {
t1 := queue[0]
t2 := queue[1]
queue = queue[2:]
if t1 == nil && t2 == nil {
continue
}
if t1 == nil || t2 == nil || t1.Val != t2.Val {
return false
}
queue = append(queue, t1.Left, t2.Right, t1.Right, t2.Left)
}
return true
}
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用