Я работаю над этим заданием: http://www.cs.colostate.edu/~anderson/ct310/index.html/doku.php?id=assignments:assignment_2
Я строю двоичное дерево в Javascript. По сути это реляционное дерево, у нас есть этот класс дерева, который принимает 3 аргумента: данные, левый потомок, правый потомок. Левый и правый дочерние элементы - это просто новые объекты дерева, хранящиеся в var.
Вот класс дерева:
function Tree( data, left, right )
{
// pravite data
var data = data;
var leftChild = left;
var rightChild = right;
// public functions
this.getData = function()
{
return data;
}
this.left = function()
{
return leftChild;
}
this.right = function()
{
return rightChild;
}
}
Вот метод toString ()
Tree.prototype.toString = function(indent)
{
var spaces = '';
if (!indent)
{
indent = 0;
}
else{
spaces = spaces*indent;
}
// if the left tree isn't void
if(this.tree().left())
{
this.tree().left().toString(indent+5);
}
if(this.tree().right())
{
this.tree.right().toString(indent+5);
}
print(spaces + this.data);
}
Вот данные, которые мне передают. Мы используем Rhino в командной строке для тестирования.
var abc = new Tree('a', new Tree('b'), new Tree('c'));
abc.toString()
Я получаю стек через поток в методе toString. Мой профессор говорит использовать this.Left () в операторе if, потому что, когда вы выполняете рекурсивный анализ, он потерпит неудачу, когда он не определен
Есть идеи, что не так?