就是层序遍历,关键在于节点入队列的时候顺序。
原题链接 题目描述:
给定一个二叉树,检查它是否是镜像对称的例如,二叉树[1,2,2,3,4,4,3]
是对称的。
1
2
3
4
5
|
1
/ \
2 2
/ \ / \
3 4 4 3
|
解题思路:
1. 层序遍历树,将结果压入队列。再比对队列里面的值。每次从队列中出两个值
2. 如图所示,在压入队列中,顺序要改下。左子树的左对应右子树的右
3. 判断节点值是不事相等以及不为空。所有遍历完都相等即相等
golang
示例代码
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
|
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
// 初始化时,要将左右入队列,因为后续每次要出两个
queue := []*TreeNode{root.Left, root.Right}
for len(queue) > 0 {
left := queue[0]
queue = queue[1:]
right := queue[0]
queue = queue[1:]
if left == nil && right == nil {
continue
}
if (left == nil && right != nil) || (left != nil && right == nil) {
return false
}
if left.Val != right.Val {
return false
}
// 先加左子树的左子树
queue = append(queue, left.Left)
// 再加右子树的右子树
queue = append(queue, right.Right)
// 左子树的右子树
queue = append(queue, left.Right)
// 右子树的左子树
queue = append(queue, right.Left)
}
return true
}
|