-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDuplicate subtree in Binary Tree
77 lines (47 loc) · 1.32 KB
/
Duplicate subtree in Binary Tree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//User function Template for Java
/* A Binary Tree node
class Node
{
int data;
Node left, right;
Node(int item)
{
data = item;
left = right = null;
}
}
*/
class Solution {
public void getNodeList(Node node, ArrayList<Node> nodeList)
{
if(node == null) return;
nodeList.add(node);
getNodeList(node.left, nodeList);
getNodeList(node.right, nodeList);
}
public void helper(Node node, StringBuilder pattern)
{
if(node == null) return;
pattern.append(node.data);
helper(node.left, pattern);
helper(node.right, pattern);
}
int dupSub(Node root)
{
// code here
ArrayList<Node> nodes = new ArrayList<>();
HashSet<String> hs = new HashSet<>();
getNodeList(root, nodes);
for(Node n : nodes)
{
StringBuilder pattern = new StringBuilder();
helper(n, pattern);
if(hs.contains(pattern.toString()) && pattern.length() >= 3)
{
return 1;
}
hs.add(pattern.toString());
}
return 0;
}
}