返回

LeetCode 0101.对称二叉树

对称二叉树

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
}

GitHub

Built with Hugo
Theme Stack designed by Jimmy