在 javascript 中逐级解析类似二叉树的 JSON 对象

Parsing a binary tree-like JSON Object level by level in javascript

我正在研究 javascript 的二叉树 ADT 实现,想知道是否有人可以帮助我解析这个特定的 json 对象。

{"root":{"info":1,"right":{"info":3,"left":{"info":2,"count":1},"right":{"info":5,"left":{"info":4,"count":1},"count":1},"count":1},"count":1}}

在线快速 http://json.parser.online.fr/ 说输出应该是:

1
3
2 5
4

如果我要逐层打印 json。 "info"保存树节点的数据,"left"&"right"指向子节点。我的 printTreeByLevel,

this.printTreeByLevel = function(node){

  nodesQueue = [];
  var nodesInCurrentLevel = 1;
  var nodesInNextLevel = 0;
  nodesQueue.push(node);
  while (nodesQueue.length != 0) {
    currNode = nodesQueue[nodesQueue.length-1];
    nodesQueue.pop();
    nodesInCurrentLevel--;
    if (currNode) {
       document.getElementById("main").innerHTML =    document.getElementById("main").innerHTML + currNode.info +"   ";
      nodesQueue.push(currNode.left);
      nodesQueue.push(currNode.right);
      nodesInNextLevel += 2;
    }
    if (nodesInCurrentLevel == 0) {
      document.getElementById("main").innerHTML =    document.getElementById("main").innerHTML + "<br>"; 
      nodesInCurrentLevel = nodesInNextLevel;
      nodesInNextLevel = 0;
    }
  }
}
}

产生

1
3 5
4
2

您在 深度优先 而不是 呼吸优先 中解析树,这就是元素未按顺序出现的原因你想要它们。

这是什么意思

在每次迭代中,您实际上都获得了最后插入的元素。这导致您实际打印 depth 而不是按照插入的顺序(在级别上)解析树。

这是一个 JSFiddle:https://jsfiddle.net/duha7tx3/

下面是一段错误的代码:

currNode = nodesQueue[0];
nodesQueue.splice(0, 1);

我在这里做的是获取第一个元素,然后将其从数组中删除。以这种方式解析树意味着我正在访问当前级别 所有 个节点,然后 进入下一个级别。您这样做的方式意味着您先访问 下一个 级别的节点,然后再访问当前级别的节点。

希望这能回答您的问题。