题目描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入: root = [1,2,2,3,4,4,3]
输出: true
示例 2:
输入: root = [1,2,2,null,3,null,3]
输出: false
提示:
- 树中节点数目在范围 [1, 1000] 内
- -100 <= Node.val <= 100
代码及注释
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isSymmetric(root *TreeNode) bool {
// 调用 check 函数,同时传入根节点的左右子树
return check(root, root)
}
func check(left, right *TreeNode) bool {
// 如果左右子树都为空,则返回 true
if left == nil && right == nil {
return true
}
// 如果左右子树只有一个为空,则返回 false
if left == nil || right == nil {
return false
}
// 比较当前节点的值,并递归比较左子树的左节点与右子树的右节点,左子树的右节点与右子树的左节点
return left.Val == right.Val && check(left.Right, right.Left) && check(left.Left, right.Right)
}
代码解释
-
调用
isSymmetric
函数:该函数调用check
函数,并传入根节点的左右子树作为参数。 -
递归检查对称性:
- 如果左右子树都为空,则它们是对称的,返回
true
。 - 如果左右子树只有一个为空,则它们不是对称的,返回
false
。 - 否则,比较左右子树的当前节点的值,并递归地检查左子树的左节点与右子树的右节点,以及左子树的右节点与右子树的左节点是否对称。
- 如果左右子树都为空,则它们是对称的,返回