在多叉树中查找某个节点及其拓展思考

来源:互联网 发布:飞机票抢票软件 编辑:程序博客网 时间:2024/05/24 05:04
<!DOCTYPE HTML>
<html style="height: 100%">
<body style="height: 100%">
<script type="text/javascript" src="jquery-1.10.2.js"></script>
<script type="text/javascript">
var tree=
[
{
id:1,
children:
[
{
id:2,
children:
[
{id:4
}
]
},
{
id:3,
children:
[
{
id:10
}
]
}
]
},
{
id:11,
children:
[
{
id:112,
children:
[
{
id:114
}
]
},
{
id:311,
children:
[
{
id:1110
},
{
id:110,
children:
[
{
id:101
},
{
id:212
}


]
},
]
}
]
},
]
var cache={}

function sort(tree,parent){
$.each(tree,function(index,value){
cache[value.id]=value;
cache[value.id].parent=parent;
sort(value.children?value.children:[],value.id);
})
}
sort(tree,0)
function findNodeById(id){
console.log(cache[id])
}
findNodeById(101)
</script>

</html>



在一棵树中查找某一个节点,最直接的算法是遍历一棵树,但是如果需要频繁查找的时候,时间复杂度会很高,如果只是数次的查找,那么每次都去遍历树就行,所以上面的算法主要应用是在一棵树中频繁查找节点的情形。算法思路主要是先遍历整棵树,然后构造出一个哈希表,哈希表里的每个元素都是一个对象(对应c语言里的一个结构体),构造完哈希表之后,以后的每次查找都可以直接从哈希表里找出需要查找的节点,在遍历的过程中把每个节点的父元素,子元素和本身节点的关系保存起来,这样可以应用于很多情形,例如查找某节点属于哪一层,或者某一层的节点有多少个等,这个算法的空间复杂度比较大,需要存储n个节点和cache和递归遍历时栈的开销,时间复杂度主要是遍历整棵树,时间复杂度是n,查找的复杂度是1.算法有待继续优化。

0 0
原创粉丝点击