diff --git a/go/572-Subtree-of-Another-Tree.go b/go/572-Subtree-of-Another-Tree.go new file mode 100644 index 000000000..b758dc170 --- /dev/null +++ b/go/572-Subtree-of-Another-Tree.go @@ -0,0 +1,27 @@ +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ +func isSubtree(root *TreeNode, subRoot *TreeNode) bool { + if root == nil { + return false + } + + return equals(root, subRoot) || isSubtree(root.Left, subRoot) || isSubtree(root.Right, subRoot) +} + +func equals(s *TreeNode, t *TreeNode) bool { + if s == nil && t == nil { + return true + } + + if s == nil || t == nil || s.Val != t.Val { + return false + } + + return equals(s.Left, t.Left) && equals(s.Right, t.Right) +} \ No newline at end of file