У меня есть следующая функция для вычисления координат для каждого узла в двоичном дереве.Координаты каждого узла в двоичном дереве?
//x & y parameters should be untouched
//root assumed to be 0,0
function nodeCoordinates(node, x, y)
{
if (x === undefined && y === undefined) {x = 0; y = 0;}
if (!node) {return;}
console.log("Node: " + node.value + " x: " + x + " y: " + y);
nodeCoordinates(node.left, --x, --y);
nodeCoordinates(node.right, x+=2, y--);
}
узла и дерева (BST):
//Nodes for BST
function Node(val) {
this.value = val;
this.left = null;
this.right = null;
}
//Binary Search Tree
function BST() {
this.root = null;
}
Для х, он должен уменьшать, если он пойдет налево. приращение, если оно идет правильно.
Для y, он должен уменьшаться, когда он опускается вниз.
Пример тестового кода и выход:
my_BST.insert(50);
my_BST.insert(60);
my_BST.insert(55);
my_BST.insert(20);
my_BST.insert(70);
my_BST.insert(80);
my_BST.insert(10);
my_BST.insert(30);
my_BST.insert(65);
nodeCoordinates(my_BST.root);
- Узел: 50 х: 0 у: 0
- Узел: 20 х: -1 у: -1
- Узел: 10 х: -2 у: -2
- Узел: 30 х: 0 у: -2
- Узел: 60 х: 1 г: -1
- Узел: 55 х: 0 у: -2
- Узел: 70 х: 2 у: -2
- Узел: 65 х: 1 у: -3
- Узел: 80 х: 3 у: -3
Выходной сигнал является правильным, но это был результатом возиться с тем, как параметры передаются с рекурсией, и это кажется неинтуитивным. Может кто-нибудь помочь мне уточнить, что происходит? Есть ли более интуитивный способ сделать это?
У меня есть проблемы с странного использования incrementers в качестве параметров. –
Ehh. Это не самый обычный способ сохранить ценности, но это довольно удобно. – insertmike