`

预排序遍历树算法(modified preorder tree traversal algorithm)

 
阅读更多
预排序遍历树算法(modified preorder tree traversal algorithm)

这个算法有如下几个数据结构:
1、lft 代表左 left
2、rgt 代表右 right
3、lvl 代表所在的层次 level
下面这个图是一个典型的结构:




我们先看一些使用方法

1、查看整个树(A)有多少节点(包含自己),直接看根节点就行了 (right-left+1)/2 = (20-1+1)/2 = 10

   这个数有10个节点

2、查看从节点A到E的路径

   1 select * from tree where lft between 1 and 6 and rgt between 7 and 20 order by lft



  得到的结果是A,B,D,E 这4个节点的数据,且按照访问路径的顺序

  如果2个节点之间不是上下级的关系,则查询没有结果

  反向也是一样的,可以拿到底部一个节点,到上级节点的路径

  1 select * from tree where lft between 1 and 6 and rgt between 7 and 20 order by lft desc



  唯一的区别就是排序是反向的就行了。

3、得到某个节点下面的所有节点,且按照树状结构返回我们用B做例子

  1 select * from tree where lft>2 and right<11 order by lft



  拿到的结果是 C,D,E,F,而且顺序也是正确的。

4、拿到所有下2级的子节点我们A做例子,这次加上了lvl的参数,因为A的level是1,所以我们查询level不大于3的。

  1 select * from tree where lft>2 and right<11 and lvl<=3 order by lft



  下面看我们新增加一个节点的方法。我们在根节点的下面,G节点的右侧增加一个X节点





我们要做的工作就是

1、G节点的右参数为13

2、变更所有的受影响的节点,给新节点腾出空位子,所有左节点比G节点大的,都增加2

   1 update tree set lft=lft+2 where lft>12



   所有右节点比G节点大的,都增加2

  1 update tree set rgt=rgt+2 where rgt>13



3、新节点放在空位子上,lft=14,rgt=15,这样就完成了一个新节点的增加操作。

算法说明:

1.所有分类 左边和右边的值 > 插入节点的左边节点记录的右值 的全部 + 2

2.插入节点 左值 = 插入位置左边节点记录的右值 + 1, 右值 = 插入位置左边节点记录的右值 + 2

 
本文来自http://www.cnblogs.com/woodcutter/archive/2010/04/21/1716923.html,在此感谢!

其它相关说明请参考:

http://be-evil.org/tb.php?sc=67fcc&id=168

http://blog.csdn.net/wisewillpower/archive/2008/04/19/2306461.aspx
  • 大小: 47.5 KB
  • 大小: 44.8 KB
分享到:
评论

相关推荐

    mptt:预排序遍历树算法的 Laravel lumen 实现

    预排序遍历树算法 (modified preorder tree traversal algorithm) 的 Laravel / lumen 实现。 假定使用的模型名为 Tree ,对应表应至少包含下列字段,字段类型建议为无符号整数。 id 为主键 pid 为父级的 id ,此项在...

    组织机构算法

    本文主要介绍了组织机构数据库设计中的一种高效算法--预排序遍历树算法(Modified Preorder Tree Traversal Algorithm)。该算法适用于组织机构的数据库设计,能够高效地存储和查询组织机构的树形结构数据。 在组织...

    解析左右值无限分类的实现算法

    预排序遍历树算法(modified preorder tree traversal algorithm)是另一种用于实现无限分类的方法,它通过在节点数据中增加两个字段:lft(left)和rgt(right),这两个字段的值表示该节点在遍历树的过程中,左值...

    Java Binary Tree Order

    在`BinaryTree_PreOrder.java`中,应该能找到前序遍历的代码实现,其递归版本会首先访问根节点,然后遍历左子树,最后遍历右子树。 5. **遍历算法的非递归实现** 虽然递归是最直观的方法,但非递归实现(如使用栈...

    数据结构&算法1

    其他常见的遍历方式还包括前序遍历(Preorder Traversal,DLR)和后序遍历(Postorder Traversal,LRD)。 除了二叉查找树,还有其他高级数据结构,如堆(Heap)、并查集(Disjoint Set)、Trie树、AVL树和红黑树。...

    algorithm-zh

    - 前序遍历(Preorder Traversal) - 中序遍历(Inorder Traversal) - 后序遍历(Postorder Traversal) #### Huffman压缩(Huffman Compression) - **定义**: 一种用于无损数据压缩的方法。 - **原理**: 使用变长编码...

    DFS.rar_DFS algorithm_dfs_dfs python

    DFS有两种主要变体:前序遍历(Preorder Traversal)、后序遍历(Postorder Traversal)。在树中,前序遍历的顺序为根-左-右,后序遍历的顺序为左-右-根。在图中,由于边的无序性,这些概念可能不太适用,但基本的...

    leetCode:Leetcode解决方案

    例如,Binary Tree Preorder Traversal(二叉树前序遍历)和Shortest Path in Binary Matrix(二进制矩阵中最短路径)等。 二、算法策略 1. 搜索:深度优先搜索(DFS)和广度优先搜索(BFS)是解决许多问题的有效...

Global site tag (gtag.js) - Google Analytics