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 }