101.对称二叉树
101.对称二叉树
101.对称二叉树
题解
题目:判断这个二叉树是不是对称的
思路
递归
队列
两者的思路都是一样的,直接看代码就能看懂了
代码
func isSymmetric(root *TreeNode) bool {
var dfs func(left, right *TreeNode) bool
dfs = func(left, right *TreeNode) bool {
if left == nil && right == nil { //都是nil,为true
return true
}
if left == nil || right == nil { //其中一个nil,一个不为nil
return false
}
if left.Val != right.Val { //值不相等
return false
}
//判断左子树的左边和右子树的右边
//判断左子树的右边和右子树的左边
return dfs(left.Left, right.Right) && dfs(left.Right, right.Left)
}
return dfs(root, root)
}
func isSymmetric(root *TreeNode) bool {
queue := make([]*TreeNode, 0)
queue = append(queue, root, root)
for len(queue) != 0 {
left, right := queue[0], queue[1]
queue = queue[2:]
if left == nil && right != nil { //其中一个nil,一个不为nil
return false
}
if left != nil && right == nil { //其中一个nil,一个不为nil
return false
}
if left == nil && right == nil {
continue
}
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
}