037_对称二叉树
知识点:二叉树遍历
LeetCode第一百零一题:https://leetcode-cn.com/problems/symmetric-tree/solution/
说是简单,在没看到答案之前也要想很久啊,官腔就是:思路没打开。
语言:GoLang
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
// 迭代,但是空间复杂度有点高
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
q := []*TreeNode{root.Left, root.Right}
for len(q) > 0 {
left, right := q[0], q[1]
q = q[2:]
if left == nil && right != nil {
return false
}
if left != nil && right == nil {
return false
}
if left != nil && right != nil {
if left.Val != right.Val {
return false
}
q = append(q, left.Left)
q = append(q, right.Right)
q = append(q, right.Left)
q = append(q, left.Right)
}
}
return true
}
// 递归,双百
func isSymmetric_(root *TreeNode) bool {
if root == nil {
return true
}
return traverse(root.Left, root.Right)
}
func traverse(left *TreeNode, right *TreeNode) bool {
if left == nil && right == nil {
return true
}
if left == nil || right == nil {
return false
}
if left.Val == right.Val {
return traverse(left.Left, right.Right) && traverse(right.Left, left.Right)
} else {
return false
}
}

浙公网安备 33010602011771号