<script language="javascript">
//第一为pid,第二为id
addNode(-1,0,"000");
addNode(0,1,"001");
addNode(0,2,"002");
addNode(1,3,"003");
addNode(1,4,"004.html");
addNode(2,5,"005.html");
addNode(2,6,"006.html");
addNode(3,7,"007.html");
addNode(3,8,"008.html");
addNode(3,9,"008.html");
show();
Nodes = new Array() ; function node(pid,id,name){
this.pid = pid;
this.id = id;
this.name = name;
Nodes[ Nodes.length ] = this ;
}
function addNode(pid,id,name){
new node(pid,id,name)
}
var str = ""
function listNodes(rootId){
for(i=0; i<Nodes.length;i++){
if(rootId == Nodes[i].pid){
listNodes(Nodes[i].id);
}
}
str = str + Nodes[rootId].name + "-";
}
function show(){
listNodes(0);
alert(str);
}</script>
上面的代码,我是想遍历树,可是就是不能全部遍历,这种遍历树的算法具体应该是怎么样啊?
//第一为pid,第二为id
addNode(-1,0,"000");
addNode(0,1,"001");
addNode(0,2,"002");
addNode(1,3,"003");
addNode(1,4,"004.html");
addNode(2,5,"005.html");
addNode(2,6,"006.html");
addNode(3,7,"007.html");
addNode(3,8,"008.html");
addNode(3,9,"008.html");
show();
Nodes = new Array() ; function node(pid,id,name){
this.pid = pid;
this.id = id;
this.name = name;
Nodes[ Nodes.length ] = this ;
}
function addNode(pid,id,name){
new node(pid,id,name)
}
var str = ""
function listNodes(rootId){
for(i=0; i<Nodes.length;i++){
if(rootId == Nodes[i].pid){
listNodes(Nodes[i].id);
}
}
str = str + Nodes[rootId].name + "-";
}
function show(){
listNodes(0);
alert(str);
}</script>
上面的代码,我是想遍历树,可是就是不能全部遍历,这种遍历树的算法具体应该是怎么样啊?
if(rootId == Nodes[i].pid){
listNodes(Nodes[i].id);
}
给i定义,改为如下
for(var i=0; i<Nodes.length;i++){
if(rootId == Nodes[i].pid){
listNodes(Nodes[i].id);
}
如果不定义i,直接使用,i会作为全局变量。这样在递归返回时,i的值会为10,所以出错。
而且变量定义一定要在使用之前定义,并且加上var最好,所以
var Nodes = new Array() ;
var str = ""
最好在一开始就定义
function listNodes(rootId){
for(i=0; i<Nodes.length;i++){
if(rootId == Nodes[i].pid){
listNodes(Nodes[i].id); //递归子节点
}
}
str = str + Nodes[rootId].name + "-";
}理论上是没问题的,可能是哪里输出问题吧