`
fehly
  • 浏览: 245580 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

常用的几种Tree的设计

阅读更多

    对常见几种tree的表的设计

 

  第一种 

create table article
(
  id number primary key, 
  cont varchar2(4000),
  pid number
);

   加一个pid关联id,也是最常用(递归)方式之一

 

insert into article values (1, '地区', 0);
insert into article values (2, '北京', 1);
insert into article values (3, '海淀区', 2);
insert into article values (4, '东城区', 2);
insert into article values (5, '王府井', 4);
insert into article values (6, '上海', 1);
insert into article values (7, '徐汇区', 6);
insert into article values (8, '美罗城', 7);
insert into article values (9, '普陀区', 6);
insert into article values (10, '中山北路', 9);

 

create or replace procedure p (v_id article.id%type, v_grade binary_integer)
is
  cursor c is select * from article where pid = v_id;
  v_preStr varchar2(1024);
begin
  
  for v_i in 1..v_grade loop
    v_preStr := v_preStr || '----';
  end loop;
  
  for v_a in c loop 
    dbms_output.put_line(v_preStr || v_a.cont);
    p (v_a.id, v_grade + 1);
  end loop;
end;

begin
  p(0, 0);
end;

    输出

 

地区
----北京
--------海淀区
--------东城区
------------王府井
----上海
--------徐汇区
------------美罗城
--------普陀区
------------中山北路

   第二种:

 

create table article
(
    id number primary key,
    cont varchar2(4000),
    pid number,
    isleaf number(1), --0 代表非叶子节点,1代表叶子节点
    alevel number(2) --代表几级目录
);

 

insert into article values (1, '地区', 0, 0, 0);
insert into article values (2, '北京', 1, 0, 1);
insert into article values (3, '海淀区', 2, 1, 2);
insert into article values (4, '东城区', 2, 0, 2);
insert into article values (5, '王府井', 4, 1, 3);
insert into article values (6, '上海', 1, 0, 1);
insert into article values (7, '徐汇区', 6, 0, 2);
insert into article values (8, '美罗城', 7, 1, 2);
insert into article values (9, '普陀区', 6, 0, 2);
insert into article values (10, '中山北路', 9, 1, 3);
commit;

 
create or replace procedure p (v_pid article.pid%type, v_level binary_integer) is
  cursor c is select * from article where pid = v_pid;
  v_preStr varchar2(1024) := '';
begin
  for i in 1..v_level loop 
    v_preStr := v_preStr || '****';
  end loop;

  for v_article in c loop
    dbms_output.put_line(v_preStr || v_article.cont);
    if(v_article.isleaf = 0) then 
      p (v_article.id, v_level + 1);
    end if;
  end loop;
end;

begin
  p(0, 0);
end;

 

地区
****北京
********海淀区
********东城区
************王府井
****上海
********徐汇区
************美罗城
********普陀区
************中山北路

 

   第三种:

drop table article;
create table article 
(
   id number primary key,
   cont varchar2(4000),
   str char(8), --number(8) --str代表层次
   grade number(1)
);
 
insert into article values (1, '地区', '01000000', 1);
insert into article values (2, '北京', '01010000', 2);
insert into article values (3, '海淀区', '01010100', 3);
insert into article values (4, '东城区', '01010200', 3);
insert into article values (5, '王府井', '01010201', 4);
insert into article values (6, '上海', '01020000', 2);
insert into article values (7, '徐汇区', '01020100', 3);
insert into article values (8, '美罗城', '01020101', 4);
insert into article values (9, '普陀区', '01020200', 3);
insert into article values (10, '中山北路', '01020201', 4);
commit;
 
select * from article order by str;
declare
  cursor c is select * from article order by str;
  v_preStr varchar2(1024) := '';
begin
  for v_temp in c loop 
    v_preStr := '';
    for i in 1..v_temp.grade loop
      v_preStr := v_preStr || '****';
    end loop;
    dbms_output.put_line(v_preStr || v_temp.cont);
  end loop;
end;
 
****地区
********北京
************海淀区
************东城区
****************王府井
********上海
************徐汇区
****************美罗城
************普陀区
****************中山北路
 
分享到:
评论

相关推荐

    用Python解析XML的几种常见方法的介绍

    这篇文章主要介绍了用Python解析XML的几种常见方法,包括快速的使用ElementTree模块等方法的实例介绍,需要的朋友可以参考下 一、简介 XML(eXtensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据...

    Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip

    - 【Java常用几种加密算法】在[com.gradle.java.encryption](/tree/master/src/main/java/com/gradle/java/encryption)包名下 ;[加密算法测试](/tree/master/src/main/java/com/gradle/java/test) - 【Rxjava的学习...

    JSP无限级分类目录树-sorttree.zip

    JSP无限级分类目录树是一种常用的网站导航方式,它可以让用户更方便地查看和访问网站上的不同页面和内容。该导航树的最大特点是可以无限级别地展开和收起,这样用户就可以根据自己的需要和兴趣,自由浏览和访问网站...

    用java写的几个树在GUI上的实现

    java版的 树(tree)常见的三种方法

    mysql面试看这篇就够了

    一、什么是索引 ...三、Mysql常见的几种索引数据结构 Mysql表常用索引结构有两种BTree和Hash其中BTree又分为B-Tree和B+Tree本文只介绍BTree 在谈Mysql常用的几种索引结构之前我们先回忆一下我们学过的

    无线传感器ZigBee网络的路由协议研究 (2011年)

    本文对常见ZigBee网络中的几种路由协议进行分析和研究,并通过NS2进行了仿真。结果表明,由Cluster-Tree与AODVjr结合的协议在分组投递率、端对端平均延时、网络生存时间方面有较好的表现,为无线传感器网络的路由协议...

    asp.net知识库

    常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18...

    leetcode岛屿面积-fq_algorithm_practice:FQ的算法数据结构练习

    leetcode岛屿面积 FQ算法练习仓库 lc 主要是 leetcode 相关算法题 backtracking(回溯) 全排列 电话号码的组合 ...主要是常见的几种排序算法的实现 选择排序 堆排序 插入排序 归并排序 快速排序 tree

    C#数据结构

    当然,程序设计水平的提高仅仅靠看几本程序设计书是不行的。只有多思索、 多练习,才能提高自己的程序设计水平;否则,书看得再多,提高也不大。记得 刚学程序设计时,常听人说程序设计水平要想提高,最重要的是多看...

    jive.chm

    系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 <br> 设计模式 1 大道至简-Java之23种模式一点就通 2 设计模式...

    Java数据结构和算法中文第二版(2)

    几种简单排序之间的比较 小结 问题 实验 编程作业 第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet...

    Java数据结构和算法中文第二版(1)

    几种简单排序之间的比较 小结 问题 实验 编程作业 第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    在XML文档中,上述几种语句的语法都是错误的。因为: 1.所有的标记都必须要有一个相应的结束标记; 2.所有的XML标记都必须合理嵌套; 3.所有XML标记都区分大小写; 4.所有标记的属性必须用""括起来; 所以上列...

    Ext 开发指南 学习资料

    6.1. 有了它,我们就可以摆脱那些自称ui设计师的人了。 6.2. ViewPort对整个窗口布局 6.3. 脑袋上有几个标签的tabPanel 6.4. 让布局复杂一点儿 6.5. 向诸位介绍一下各具特色的布局 6.5.1. accordion就是QQ那样的伸缩...

    支持多数据库的ORM框架ef-orm.zip

    事实上JPA的几种数据查询方式存在青黄不接的问题。选择查询语言xxQL,项目面临后续维护困难,跨数据库移植性差;选择Criteria API,代码臃肿,操作繁琐,很多人望而却步。EF的设计思想是使人早日摆脱拼装SQL/HQL/...

    IOI国家集训队论文集1999-2019

    龙 翀 -《解决空间规模问题的几种常用的存储结构》 骆 骥 -《数学模型的建立和选择》 施 遥 -《人工智能在围棋程序中的应用》 肖 洲 -《数据结构的在程序设计中的应用》 谢 婧 -《规模化问题的解题策略》 徐 串...

    vc++ 应用源码包_6

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    用递归的方法画分形图

     用分形图形能画图许多漂亮的图案而被广泛地应用,下面将几个简单的分形图形的代码与图形大家分享。 //Couch曲线的画法 void Couch(CDC *pDC,int x1,int y1,int x2,int y2,int n) { //pDC是画图的设备上下文的...

    vc++ 应用源码包_5

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    vc++ 应用源码包_1

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

Global site tag (gtag.js) - Google Analytics