使用二叉树算法设计一个无限分级的树表(1)

名词解释:
  二叉树
      树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,
很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。
使用二叉树算法设计一个无限分级的树表(1)_第1张图片
例如:一个公司网站的结构(当然可以更复杂)
 1首页(1,28)                       父节点范围:(x,y) x=初始值(1)    y=2*节点个数
   2公司简介(2,11)              子节点范围:(x,y) x=上级节点包含的子项最后一个数+2  y=级数*子项个数+x+1
       3集团简介(3,4)
       4品牌建设(5,6)
       5组织结构(7,8)
       6成员公司(9,10) 
   7新闻动态(12,19)
       8地产新闻(13,14)
       9法律法规(15,16)
       10行业动态(17,18)
   11工程在线(20,25)
       12市广电中心(21,22)
       13中山花园项目(23,24)
   14客户服务 (26,27)


建立测试数据表:

ContractedBlock.gifExpandedBlockStart.gifCode
--建立以上结构的表
CREATE TABLE TestTree
(
   id 
INT IDENTITY PRIMARY KEY,
   node_min 
INT,          --节点最小范围
   node_max INT,          --节点最大范围
   node_lvl INT,          --所属级数
   nodename VARCHAR(50),  --节点名称
   nodeurl NVARCHAR(150-- 节点路径

)

--建立测试数据
INSERT INTO TestTree VALUES (1,28,1,0,1,'首页','http://www.msdn.com')

   
INSERT INTO TestTree VALUES (2,11,2,1,2,'公司简介','http://www.msdn.com')
        
INSERT INTO TestTree VALUES (3,4,3,2,3'集团简介','http://www.msdn.com')
        
INSERT INTO TestTree VALUES (5,6,3,2,4'品牌建设','http://www.msdn.com')
        
INSERT INTO TestTree VALUES (7,8,3,2,5'组织结构','http://www.msdn.com')
        
INSERT INTO TestTree VALUES (9,10,3,2,6,'成员公司','http://www.msdn.com')
        
   
INSERT INTO TestTree VALUES (3,12,2,1,7,'最新公告','http://www.msdn.com')
   
   
INSERT INTO TestTree VALUES (12,19,2,1,7,'新闻动态','http://www.msdn.com')
        
INSERT INTO TestTree VALUES (13,14,3,7,8'地产新闻','http://www.msdn.com')
        
INSERT INTO TestTree VALUES (15,16,3,7,9'法律法规','http://www.msdn.com')
        
INSERT INTO TestTree VALUES (17,18,3,7,10,'行业动态','http://www.msdn.com')

  
INSERT INTO TestTree VALUES (20,25,2,1,11,'工程在线','http://www.msdn.com')
       
INSERT INTO TestTree VALUES (21,22,3,12,12,'市广电中心','http://www.msdn.com')
       
INSERT INTO TestTree VALUES (23,24,3,12,13,'中山花园项目','http://www.msdn.com')
       
  
INSERT INTO TestTree VALUES (26,27,2,1,14,'客户服务','http://www.msdn.com')

查询结果:
使用二叉树算法设计一个无限分级的树表(1)_第2张图片


  遍历树:

ContractedBlock.gif ExpandedBlockStart.gif Code
   --查询树包含多少个节点
    SELECT (node_max-node_min+1)/2 FROM TestTree WHERE id=1

   
--从首页节点(1,28)到成员公司节点(9,10)的路径 如:首页->公司简介->成员公司
    SELECT * FROM TestTree WHERE node_min between 1 and 9 and node_max between 10 and 28 order by node_min 
   
   
--反向  成员公司->公司简介->首页
    SELECT * FROM TestTree WHERE node_min between 1 and 9 and node_max between 10 and 28 order by node_max 
   
   
-- 得到某个节点下面的所有节点,且按照树状结构返回 
   --拿工程在线节点(20,25)为例
    SELECT * FROM TestTree WHERE node_min>20 AND node_max<25 ORDER BY node_min
    
    
--得到首页下的第2级节点  显示为:公司简介,新闻动态,工程在线,客户服务
    SELECT * FROM TestTree WHERE node_min>1 AND node_max<34 AND node_lvl=2 ORDER BY node_min 
    
          请继续看下篇.....

转载于:https://www.cnblogs.com/huangting2009/archive/2009/05/14/1456386.html

你可能感兴趣的:(数据结构与算法)