Я пытаюсь сравнить два двоичных дерева, чтобы увидеть, равны ли они по структуре и значению, но в какой-то момент в алгоритме оператор return не работает, когда помещается в блок кода if только для тех значений, которые я хочу сравнивать.
* 1001 то есть *
let a = "myVal"
let b = "myVal"
if(a = b){
return false
}
Вышеприведенное не работает только с переменными, которые я хочу сравнить, но хорошо работает с любой другой переменной.
Я проверил тип и значение обеих переменных, и они действительно равны.
Кроме того, когда я выкидываю ошибку внутри блока if, он работает, когда выполняется условие, но оператор return
не просто работает.
Вот полный код
function compare(a, b){
if(a === null && b === null){
return true;
}
if(typeof a === 'object' && typeof b === 'object'){
// compare their structures
let aRoot = Object.keys(a);
let bRoot = Object.keys(b);
if(aRoot.length !== bRoot.length){
console.log('0')
return false; //Trees are of different structures
}
//Loop through the roots of the tree
for(let i in aRoot){
if(aRoot[i] !== bRoot[i]){
//Make sure the roots are represented with equal names
console.log('1')
return false;
}
let aValue = a[aRoot[i]];
let bValue = b[bRoot[i]];
if(typeof aValue !== typeof bValue){
console.log('2')
return false
}
if(aValue !== null && bValue !== null){
//If they are both of the same types compare their values check if they are child nodes or not
if(typeof aValue !== 'object'){
//Here's the main problem
if(aValue !== bValue){
// console.log("aValue : ", aValue, " bValue : ", bValue)
// console.log("aValue type : ", typeof aValue, " bValue type : ", typeof bValue)
return false;
}
}
else{
// console.log('a ', aValue)
compare(aValue, bValue);
}
}
}
}
return true;
}
let aNode = {val: 1, left: null, right: null, d: {val: 1, left: null, right: null, f: {val: 2, left: null, right: null}}};
let bNode = {val: 1, left: null, right: null, d: {val: 3/* This differs from aNode*/, left: null, right: null, f: {val: 2, left: null, right: null}}};
console.log(compare(aNode, bNode))
Работает с деревьями без корневых узлов, но не с деревьями с корневыми узлами.
Проблема возникает из if(aValue !== bValue)
части кода. Этот блок кода не просто возвращает false, но когда выдается ошибка, он работает.