Skip to content

Commit b01c0ce

Browse files
committed
Updated Clone Binary Tree With Random Pointer
1 parent 6d9400d commit b01c0ce

File tree

1 file changed

+34
-35
lines changed

1 file changed

+34
-35
lines changed

Medium/Clone Binary Tree With Random Pointer.java

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,44 +17,43 @@
1717
*/
1818

1919
class Solution {
20-
public NodeCopy copyRandomBinaryTree(Node root) {
21-
if (root == null) {
22-
return null;
23-
}
24-
Queue<Node> queue = new LinkedList<>();
25-
Map<Node, NodeCopy> map = new HashMap<>();
26-
queue.add(root);
27-
while (!queue.isEmpty()) {
28-
int size = queue.size();
29-
while (size-- > 0) {
30-
Node removed = queue.remove();
31-
map.put(removed, new NodeCopy(removed.val));
32-
if (removed.left != null) {
33-
queue.add(removed.left);
34-
}
35-
if (removed.right != null) {
36-
queue.add(removed.right);
20+
public NodeCopy copyRandomBinaryTree(Node root) {
21+
if (root == null) {
22+
return null;
3723
}
38-
}
24+
Map<Node, NodeCopy> map = new HashMap<>();
25+
copyOnlyNode(root, map);
26+
copyNodePointers(root, map);
27+
return map.get(root);
3928
}
40-
queue.add(root);
41-
while (!queue.isEmpty()) {
42-
int size = queue.size();
43-
while (size-- > 0) {
44-
Node removed = queue.remove();
45-
if (removed.left != null) {
46-
queue.add(removed.left);
47-
map.get(removed).left = map.get(removed.left);
29+
30+
private void copyNodePointers(Node root, Map<Node, NodeCopy> map) {
31+
Queue<Node> queue = new LinkedList<>();
32+
queue.add(root);
33+
while (!queue.isEmpty()) {
34+
Node removed = queue.remove();
35+
NodeCopy copied = map.get(removed);
36+
if (removed.left != null) {
37+
queue.add(removed.left);
38+
copied.left = map.get(removed.left);
39+
}
40+
if (removed.right != null) {
41+
queue.add(removed.right);
42+
copied.right = map.get(removed.right);
43+
}
44+
if (removed.random != null) {
45+
copied.random = map.get(removed.random);
46+
}
4847
}
49-
if (removed.right != null) {
50-
queue.add(removed.right);
51-
map.get(removed).right = map.get(removed.right);
52-
}
53-
if (removed.random != null) {
54-
map.get(removed).random = map.get(removed.random);
48+
}
49+
50+
private void copyOnlyNode(Node root, Map<Node, NodeCopy> map) {
51+
if (root == null) {
52+
return;
5553
}
56-
}
54+
NodeCopy copiedNode = new NodeCopy(root.val);
55+
map.put(root, copiedNode);
56+
copyOnlyNode(root.left, map);
57+
copyOnlyNode(root.right, map);
5758
}
58-
return map.get(root);
59-
}
6059
}

0 commit comments

Comments
 (0)