在 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);
我在这里做的是获取第一个元素,然后将其从数组中删除。以这种方式解析树意味着我正在访问当前级别 所有 个节点,然后 进入下一个级别。您这样做的方式意味着您先访问 下一个 级别的节点,然后再访问当前级别的节点。
希望这能回答您的问题。
我正在研究 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);
我在这里做的是获取第一个元素,然后将其从数组中删除。以这种方式解析树意味着我正在访问当前级别 所有 个节点,然后 进入下一个级别。您这样做的方式意味着您先访问 下一个 级别的节点,然后再访问当前级别的节点。
希望这能回答您的问题。