From 88d5b504b1532b17ce48bfce43b129c014ad7056 Mon Sep 17 00:00:00 2001 From: bus710 Date: Sun, 23 Feb 2025 07:29:02 -0800 Subject: [PATCH] week12 --- same-tree/bus710.go | 69 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 same-tree/bus710.go diff --git a/same-tree/bus710.go b/same-tree/bus710.go new file mode 100644 index 000000000..9a3798f57 --- /dev/null +++ b/same-tree/bus710.go @@ -0,0 +1,69 @@ +package hello + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func isSameTree(p, q *TreeNode) bool { + if p == nil && q == nil { + return true + } + + return checker(p, q) +} + +func checker(p, q *TreeNode) bool { + if eitherNilChecker(p, q) { + return false + } + + if p.Val != q.Val { + return false + } + + if !bothNilChecker(p.Left, q.Left) { + re := checker(p.Left, q.Left) + if !re { + return false + } + } + if !bothNilChecker(p.Right, q.Right) { + re := checker(p.Right, q.Right) + if !re { + return false + } + } + + return true +} + +func eitherNilChecker(p, q *TreeNode) bool { + if p == nil && q != nil { + return true + } + if p != nil && q == nil { + return true + } + if p.Left != nil && q.Left == nil { + return true + } + if p.Left == nil && q.Left != nil { + return true + } + if p.Right != nil && q.Right == nil { + return true + } + if p.Right == nil && q.Right != nil { + return true + } + return false +} + +func bothNilChecker(p, q *TreeNode) bool { + if p == nil && q == nil { + return true + } + return false +}