|
@@ -0,0 +1,25 @@
|
|
|
+/**
|
|
|
+ * Definition for a binary tree node.
|
|
|
+ * type TreeNode struct {
|
|
|
+ * Val int
|
|
|
+ * Left *TreeNode
|
|
|
+ * Right *TreeNode
|
|
|
+ * }
|
|
|
+ */
|
|
|
+func findDuplicateSubtrees(root *TreeNode) (res []*TreeNode) {
|
|
|
+ m := make(map[string]int)
|
|
|
+ helper(root, m, &res)
|
|
|
+ return res
|
|
|
+}
|
|
|
+
|
|
|
+func helper(root *TreeNode, m map[string]int, res *[]*TreeNode) string {
|
|
|
+ if root == nil {
|
|
|
+ return "#"
|
|
|
+ }
|
|
|
+ path := helper(root.Left, m, res) + " " + helper(root.Right, m, res) + " " + strconv.Itoa(root.Val)
|
|
|
+ if m[path] == 1 {
|
|
|
+ *res = append(*res, root)
|
|
|
+ }
|
|
|
+ m[path]++
|
|
|
+ return path
|
|
|
+}
|