package leetcode import ( "github.com/halfrost/LeetCode-Go/structures" ) // TreeNode define type TreeNode = structures.TreeNode /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ // 解法一 dfs func isSymmetric(root *TreeNode) bool { return root == nil || dfs(root.Left, root.Right) } func dfs(rootLeft, rootRight *TreeNode) bool { if rootLeft == nil && rootRight == nil { return true } if rootLeft == nil || rootRight == nil { return false } if rootLeft.Val != rootRight.Val { return false } return dfs(rootLeft.Left, rootRight.Right) && dfs(rootLeft.Right, rootRight.Left) } // 解法二 func isSymmetric1(root *TreeNode) bool { if root == nil { return true } return isSameTree(invertTree(root.Left), root.Right) } func isSameTree(p *TreeNode, q *TreeNode) bool { if p == nil && q == nil { return true } else if p != nil && q != nil { if p.Val != q.Val { return false } return isSameTree(p.Left, q.Left) && isSameTree(p.Right, q.Right) } else { return false } } func invertTree(root *TreeNode) *TreeNode { if root == nil { return nil } invertTree(root.Left) invertTree(root.Right) root.Left, root.Right = root.Right, root.Left return root }