在多叉树中查找某个节点及其拓展思考
2016-05-18 02:02
176 查看
<!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.算法有待继续优化。
<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.算法有待继续优化。
相关文章推荐
- 正则表达式
- iOS开发 常用的十种数据结构
- 【JAVA】三 【设计模式】一 JAVA 单例 枚举
- Drupal的工作原理
- LeetCode 332. Reconstruct Itinerary
- 关于.net MVC中主视图和分部视图的数据共享遇到的问题
- DBUS 调试工具
- 数据结构之栈的实现
- xmgrace安装
- 在Azure上通过asp.net使用EmguCV
- GVariant Format Strings
- C# 笔记——数据类型
- Hive操作表部分总结
- anonymous inode
- C语言笔记之一 数组与函数篇(一)
- poj1679(次小生成树)
- 这是个druapl 入门的文章
- Android列表RecyclerView的用法
- MAC地址和IP地址的关系
- mybatis 根据数据库表映射配置生成 模型 XML文件 Dao