私は、子ノードと親ノードを持つ古典的なツリー構造を持っています。私は、再帰的トラバーサルアプローチを使用することにより、深さレベルを得ることは非常に簡単ですが深さレベルでグループ化されたツリー構造のすべてのノードを収集する方法は?
nodes[
["A4"],
["A3","B3"],
["A2","B2","C2"],
["A1","B1","C1"],
["ROOT"]
];
:さて、私はこのような(逆の順序でIE)最低レベルから始まる深さによってグループ化されたすべてのノードを収集したいと思いますBFSまたはDFS検索のツリートラバーサル中に深度レベルをすぐに取得する方法があるかどうか疑問に思います。
私はノードの挿入中に深さレベルを保存することができますが、私は多くの挿入と削除を行っているため、レベルごとに1つのショットでグループ化された構造全体を収集することをお勧めします。
また、私はBDSまたはDFSを使用することを好みません。どちらも問題ありません。ここに私の実際のコードは次のとおりです。
function Node(code, parent) {
this.code = code;
this.children = [];
this.parentNode = parent;
}
Node.prototype.addNode = function (code) {
var l = this.children.push(new Node(code, this));
return this.children[l-1];
};
Node.prototype.dfs = function (leafCallback) {
var stack=[this], n, depth = 0;
while(stack.length > 0) {
n = stack.pop();
if(n.children.length == 0) {
if(leafCallback) leafCallback(n, this);
continue;
}
for(var i=n.children.length-1; i>=0; i--) {
stack.push(n.children[i]);
}
depth++; // ???
}
};
var tree = new Node("ROOT");
tree.addNode("A1").addNode("A2").addNode("A3").addNode("A4");
tree.addNode("B1").addNode("B2").addNode("B3");
tree.addNode("C1").addNode("C2");
が必要であることを指摘しmarvel308のおかげで 'depth'参照' .children'配列の '.length'していますか? – guest271314
@ guest271314:申し訳ありません - もちろん、それはルートへのパスの長さです – deblocker