<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>
上面的代码,我是想遍历树,可是就是不能全部遍历,这种遍历树的算法具体应该是怎么样啊?

解决方案 »

  1.   

    http://xdarui.com/articles/18.shtml我个人博客这篇可能适合你
      

  2.   

    for(i=0; i<Nodes.length;i++){
    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 = ""
    最好在一开始就定义
      

  3.   

    这样可以遍历了,
    function listNodes(rootId){
    for(i=0; i<Nodes.length;i++){
    if(rootId == Nodes[i].pid){
    listNodes(Nodes[i].id);     //递归子节点
    }
    }
    str = str + Nodes[rootId].name + "-";
    }理论上是没问题的,可能是哪里输出问题吧