From 804bf60609c9756b65930a117a818e7e9071d636 Mon Sep 17 00:00:00 2001 From: Breno Baptista Date: Sun, 20 Jun 2021 19:53:41 -0300 Subject: [PATCH] Refactored solution 101 --- .../101. Symmetric Tree.go | 55 +++++-------------- 1 file changed, 13 insertions(+), 42 deletions(-) diff --git a/leetcode/0101.Symmetric-Tree/101. Symmetric Tree.go b/leetcode/0101.Symmetric-Tree/101. Symmetric Tree.go index 63074f3e..af386f12 100644 --- a/leetcode/0101.Symmetric-Tree/101. Symmetric Tree.go +++ b/leetcode/0101.Symmetric-Tree/101. Symmetric Tree.go @@ -16,51 +16,22 @@ type TreeNode = structures.TreeNode * } */ -// 解法一 dfs +func isMirror(left *TreeNode, right *TreeNode) bool { + if left == nil && right == nil { + return true + } + + if left == nil || right == nil { + return false + } + + return (left.Val == right.Val) && isMirror(left.Left, right.Right) && isMirror(left.Right, right.Left) +} + 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 + return isMirror(root.Left, root.Right) }