class Node {
constructor(data) {
this
.data = data;
this
.left =
this
.right =
null
;
}
}
function
eachLevel(root, mm, level) {
if
(root ===
null
)
return
;
if
(!mm.has(level)) {
mm.set(level, []);
}
mm.get(level).push(root.data);
level++;
eachLevel(root.left, mm, level);
eachLevel(root.right, mm, level);
}
function
areAnagrams(mm1, mm2) {
let temp =
new
Map();
for
(let [level, nodes] of mm1.entries()) {
for
(let node of nodes) {
temp.set(node, (temp.get(node) || 0) + 1);
}
for
(let node of mm2.get(level)) {
if
(!temp.has(node) || temp.get(node) === 0) {
return
false
;
}
temp.set(node, temp.get(node) - 1);
}
}
temp.clear();
for
(let [level, nodes] of mm2.entries()) {
for
(let node of nodes) {
temp.set(node, (temp.get(node) || 0) + 1);
}
for
(let node of mm1.get(level)) {
if
(!temp.has(node) || temp.get(node) === 0) {
return
false
;
}
temp.set(node, temp.get(node) - 1);
}
}
return
true
;
}
function
newNode(data) {
return
new
Node(data);
}
let root1 = newNode(1);
root1.left = newNode(3);
root1.right = newNode(2);
root1.right.left = newNode(5);
root1.right.right = newNode(4);
let root2 = newNode(1);
root2.left = newNode(2);
root2.right = newNode(3);
root2.left.left = newNode(4);
root2.left.right = newNode(5);
let mm1 =
new
Map();
let mm2 =
new
Map();
eachLevel(root1, mm1, 0);
eachLevel(root2, mm2, 0);
if
(areAnagrams(mm1, mm2)) {
console.log(
"Yes"
);
}
else
{
console.log(
"No"
);
}