【发布时间】:2014-05-05 06:09:33
【问题描述】:
我正在编写一些 Javascript 代码。我有一个看起来像这样的 JSON 对象(为了便于阅读而修改了间距):
var myNodes = [
{
id: 4,
children: [
{
id: 1,
children: [
]
},
{
id: 3,
children: [
]
}
]
},
{
id: 2,
children: [
]
},
{
id: 6,
children: [
{
id: 5,
children: [
]
}
]
}
]
此数据结构中每个节点的 id 都是唯一的。 但是,除此之外,ID 号之间根本没有固定或已知的关系。 并且每个级别的孩子数量没有限制。
如果我想搜索这棵树并返回 id == 6 的节点。我该怎么做? 我写了以下代码,但是在遇到第一个叶子节点后,整个算法返回false,这显然是不对的。我只是想做一个基本的深度优先搜索。但我不想像我在网络上的一些 DFS 实现中看到的那样,向这些数据添加额外的字段并“标记”节点。
myClass.prototype.nodeSearch = function nodeSearch(treeNodes, searchID){
for (var nodeIdx = 0; nodeIdx <= treeNodes.length-1; nodeIdx++)
{
console.log("Comparing treeNodes element with ID==" + treeNodes[nodeIdx].id + " to SearchID==" + searchID);
if (treeNodes[nodeIdx].id == searchID)
{
console.log("Match!");
return treeNodes[nodeIdx];
}
else
{
console.log("No Match! Trying " + treeNodes[nodeIdx].children.length + " Children of Node ID#" + treeNodes[nodeIdx].id);
return this.nodeSearch(treeNodes[nodeIdx].children, searchID);
}
}
console.log("Done trying " + treeNodes.length + " children. Returning False");
return false;
};
【问题讨论】: