在多叉树中查找某个节点及其拓展思考
来源:互联网 发布:飞机票抢票软件 编辑:程序博客网 时间: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 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
- 在多叉树中查找某个节点及其拓展思考
- 二分查找及其拓展
- 在一个二叉排序树(BST)(left<right)中查找某个节点的后序节点
- jquery查找某个节点的索引
- C++单向链表-查找某个节点
- [leetcode 285] Inorder Successor in BST---查找二叉搜索树中某个节点在中序遍历中的后续节点
- 在一个目录及其所有子目录下所有的文件中查找某个单词
- MFC中遍历TreeControl的节点或者查找某个节点
- 查找专题——二分搜索及其拓展
- 在 Tree 中查找节点
- 在TreeView查找某一节点
- asm在某个节点上没有执行
- XML查找某个名字的全部节点的方法
- 查找二叉搜索树中小于某个节点的最大值
- C# 遍历文件夹及其子文件夹来查找某个文件
- 在某个目录下查找包含某个字段的文件
- 查找某个字段名在某些表
- 查找某个数是否在矩阵中
- DBUS 调试工具
- 关于.net MVC中主视图和分部视图的数据共享遇到的问题
- LeetCode 332. Reconstruct Itinerary
- Drupal的工作原理
- iOS开发 常用的十种数据结构
- 在多叉树中查找某个节点及其拓展思考
- 友盟分享
- c3p0连接池需要关闭连接么
- 算法基础 - RMQ-ST算法(在线算法)
- VMWare中Linux虚拟机设置静态IP上网的设置方法
- swift版QQ音乐播放器(一)
- 短网址知识
- Ubuntu14.04下JDK8+Tomcat7 环境配置
- Android 制作简易浏览器源码