对称二叉树
LeetCode101. 对称二叉树
题目描述
给你一个二叉树的根节点 root
, 检查它是否轴对称。
思路
使用队列来比较两个树(根节点的左右子树)是否相互翻转,注意这不是层序遍历。

代码
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
|
func isSymmetric(root *TreeNode) bool {
queue := make([]*TreeNode, 0)
if root != nil {
// 根节点非空,左右孩子节点入队
queue = append(queue, root.Left, root.Right)
}
// BFS
for len(queue) > 0 {
if queue[0] == nil && queue[1] == nil {
// 同层两侧对称的一对节点都为空.整个树不一定不对称,需要继续比较同层两侧对称的其余节点队
queue = queue[2:] // 同层两侧对称的两个节点出队
continue // 结束本次循环,下次循环比较同层两侧对称的其余节点队
} else if queue[0] == nil || queue[1] == nil || queue[0].Val != queue[1].Val {
// 同层两侧对称的一对节点的值不相等.整个树一定不对称
return false
} else {
// 同层两侧对称的一对节点的值相等,不一定对称,需要继续比较其余节点队是否对称
// 对称的节点队入队
queue = append(queue, queue[0].Left, queue[1].Right, queue[0].Right, queue[1].Left)
// 比较完成的节点对出队
queue = queue[2:]
}
}
return true
}
|
Link
GitHub