golang力扣leetcode 101.对称二叉树

简介: golang力扣leetcode 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
}
目录
相关文章
|
3月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
3月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
30 2
|
3月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
26 2
|
3月前
【LeetCode 28】102.二叉树的层序遍历
【LeetCode 28】102.二叉树的层序遍历
20 2
|
3月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
24 0
|
3月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
21 0
|
3月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
27 0
|
3月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
25 0
|
3月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
21 0
|
3月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
107 0