создать новый класс и передать его по ссылке, по сути, превратив процесс в нисходящий.

ледующий алгоритм:

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])
      // ??
    }
  }
}

Ответы на вопрос(4)

Ваш ответ на вопрос