создать новый класс и передать его по ссылке, по сути, превратив процесс в нисходящий.
ледующий алгоритм:
console.log(JSON.stringify(create(0), null, 2))
function create(i) {
if (i == 5) return
return new Klass(i, create(i + 1), create(i + 1))
}
function Klass(i, l, r) {
this.i = i
this.l = l
this.r = r
}
Это создаетKlass
вcreate(0)
прошлойпосле создания всех детей, рекурсивно. Таким образом, он сначала создает листовые узлы, затем передает их родителю и т. Д.
Хотите знать, как сделать это, используя стек без рекурсии. У меня болит голова :). Я понимаю, как использовать стек для создания сверху вниз, но не снизу вверх. Для сверху вниз, это по сути это:
var stack = [0]
while (stack.length) {
var i = stack.pop()
// do work
stack.push(children)
}
Снизу вверх я не вижу, как это должно работать. Вот где я застреваю:
function create(i) {
var stack = []
stack.push([i, 'open'])
stack.push([i, 'close'])
while (stack.length) {
var node = stack.pop()
if (node[1] == 'open') {
stack.push([ node[0] + 1, 'open' ])
stack.push([ node[0] + 1, 'close' ])
} else {
// ?? not sure how to get to this point
var klass = new Klass(node[0], node[2], node[3])
// ??
}
}
}