`

论坛或者帖子树状展开解决方案-堆栈

阅读更多
展开树状记录的程序很多是采用递归算法。我們知道,递归的方法逻辑比较简单,实际操作起来比较容易。但是递归有一个最大的缺点就是占用资源太多,速度太慢。如果在互联网的"论坛"上采用此种方法,在表记录很多的情况下将是一个非常严重的问题。我们可以用堆栈来解决递归效率低下占用资源的问题。

一、表结构(article)
  tpId   int       本记录ID号
  tpPid  int       父记录ID号
  title  varchar   贴子标题
  author varchar   贴子作者
  datetime date    发贴日期时间
    isLeaf   int     是否叶子(没有子贴)
  .....           根据具体的情况我们还可以有更多的字段
二、操作方法
  (1) 首先,我们读出所有父结点为"0"的记录也就是"主贴",统统放入堆栈中。
     (2) 然后,输出位于栈顶的一条记录("主贴")数据,并清空栈顶,栈頂下移一格。
     (3) 接着,查找所有父结点为该栈项结点("主贴")的记录("回贴"),也统统放于栈顶。
        注意到没有,就这两步我们就完成了把一条父记录输出并展开其子结点的工作。余下的工作只是依次类推而已了,直到栈为空为止。
  
三 代码简要整理.
/** 速度很快的堆栈显示帖子*/
public void stackShow(String id) {
/** 堆栈*/
StackUtil s = new StackUtil(1000);

/** 读出所有父结点为"0"的记录也就是"主贴",统统放入堆栈中*/
String pageHql = HqlUtil.getHql("Topic", "tpPid", id);
List l = topicDAO.getRecordsByHql(pageHql, id, null);
System.out.println("l.size=" + l.size());
for (int i = 0; i < l.size(); i++) {
Topic t = (Topic) l.get(i);
System.out.println("id=" + t.getTpId());
s.push(t);
}

/** 输出栈顶元素直到栈为空*/
while (!s.isEmpty()) {

/** 输出位于栈顶的一条记录("主贴")数据,并清空栈顶,栈頂下移一格*/
Topic t = s.Pop();
System.out.println("top=" + s.getTop());
System.out.println("id=" + t.getTpId());

/** 查找所有父结点为该栈项结点("主贴")的记录("回贴"),也统统放于栈顶*/
String pageHql2 = HqlUtil.getHql("Topic", "tpPid", t.getTpId());
List l2 = topicDAO.getRecordsByHql(pageHql, t.getTpId(), null);
Iterator iter = l2.iterator();
while (iter.hasNext()) {
Topic t2 = (Topic) iter.next();
s.push(t2);
}
}

}
分享到:
评论

相关推荐

    智能井盖报警器管理系统解决方案-魔豆科技

    * 系统拓扑图:该系统的拓扑图是基于树形结构的网络架构。 硬件功能介绍 -------------- 智能井盖监控管理系统解决方案的硬件功能包括: * 产品多样性:该系统提供多样化的硬件产品,满足不同的井盖管理需求。 * ...

    vue el-tree 默认展开第一个节点的实现代码

    但有时需要自定义默认展开特定的节点,比如本文中提到的默认展开树形结构的第一层第一个节点。 4. default-expanded-keys属性:为了实现默认展开特定节点,可以通过设置el-tree组件的default-expanded-keys属性来...

    react-antd table树形数据默认展开行实现jsx文件

    react-antd table树形数据默认展开行实现jsx文件

    丰富多彩的树形导航菜单--样式美观

    在IT领域,树形导航菜单是一种常见的用户界面元素,它以树状结构展示信息层级,帮助用户高效地浏览和操作复杂的数据或功能。本资源"丰富多彩的树形导航菜单--样式美观"显然聚焦于设计美观且功能丰富的树形菜单,为...

    bootstrap select树形下拉框

    3. **树形插件集成**:要启用树形结构,需要额外引入一个处理树形结构的库,如`jquery.treeview.js`。然后,使用该库的方法(如`$("#treeSelect").treeview({ expandIcon: "glyphicon glyphicon-minus", ...

    详解vue-cli+element-ui树形表格(多级表格折腾小计)

    在本文档中,详细介绍了如何利用vue-cli结合element-ui框架构建一个树形表格(也就是多级表格)。在许多项目开发中,特别是在处理有层级关系的数据时,我们需要以树形结构来展示信息,以便用户能以直观的方式浏览和...

    树形菜单大全----dhtmlxTree

    在IT领域,树形菜单是一种常见的用户界面元素,它用于组织和展示层次化的数据结构,类似于现实生活中树木的分支结构。dhtmlxTree是这样的一个JavaScript库,它提供了丰富的功能和自定义选项,使得开发者能够方便地在...

    树形展开的C#树形菜单控件(Treeview示例)

    在本案例中,我们将深入探讨如何在C#中使用`TreeView`来创建一个可展开的树形菜单。 首先,我们需要理解`TreeView`的基本结构。`TreeNode`是`TreeView`的基础元素,每个节点可以包含子节点,形成树状结构。我们可以...

    java英语笔试试题-Cracking-The-Coding-Interview:破解编码面试的解决方案-第6版

    解决方案 - 第 6 版 Ch 01 - 数组和字符串 第 02 章 - 链表 第 03 章 - 堆栈和队列 01 - 三合一 第 4 章 - 树和图 01 - 节点间路由 07 - 建造顺序 09 - BST 序列 11 - 随机节点 第 05 章 - 位操作 03 - 翻转位取胜 ...

    网站程序树形论坛源码

    总的来说,"网站程序树形论坛源码"提供了一个可定制的、基于树形结构的论坛解决方案,适用于那些希望创建独特互动社区的开发者和网站所有者。通过深入理解并利用这个源码,可以构建出高效、用户友好的在线讨论平台。

    JS树形结构菜单展开收缩代码.zip

    在JavaScript编程中,树形结构是一种常见的数据组织方式,它模拟了自然界中的树状关系,常用于构建层次化的导航菜单。Vue.js是一个流行的前端框架,它提供了强大的组件化能力,使得构建可交互的用户界面变得简单高效...

    asp树形论坛亲测绝对可用

    综上所述,"asp树形论坛亲测绝对可用"提供了从开发到部署的完整解决方案,涵盖了ASP编程、数据库设计、前端交互等多个方面的技术知识。如果你正在寻找一个基于ASP的树形论坛系统,这个资源无疑是一个值得考虑的选择...

    JS树形表格(可分级展开)

    otreetable.js 原生JS树形表格,调用非常简单(只需一句代码即可调用),获取HTML中输出的表格数据重构表格,以树形方式显示,可展开/收缩,不破坏表格原有数据格式及内容,支持无限级,兼容所有浏览器。当前版本...

    bootstrap树形表格js插件demo

    在这个文件中,我们可以看到一个基本的Bootstrap表格结构,但是通过引入特定的JavaScript和CSS文件,这个表格被增强为可以展开和折叠的树形结构。通常,这个HTML文件会包含表格的基本结构,如表头(thead)和表体...

    checkbox树形展开效果

    "checkbox树形展开效果"是这种概念的一个具体应用,它结合了多选框(checkbox)与树形结构,让用户能够以图形化的方式操作和选择具有层次关系的项目。 在实现"checkbox树形展开效果"时,我们通常会用到HTML、CSS和...

    Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作

    需求: vue-cli项目树形控件:一级节点为本地节点,默认展开一级节点,增删改后局部刷新数据。 增加节点,点击确定后局部刷新,渲染新数据。 源码 element组件样式 &lt;el-tree class="treeitems" :data="data...

    安卓树形控件相关-可根据横纵坐标自动调整的树状图的实现.rar

    文件"175225obilk9398b2kvvzz.png"可能是树状图的一个示例截图,展示了解决方案的实际效果。"JavaApk源码说明.txt"可能包含了关于源代码的一些说明,比如主要类、关键方法的解释,或者是编译和运行的步骤。"更多源码...

    bootstrap树形下拉框 下拉框树形菜单

    "bootstrap树形下拉框 下拉框树形菜单"是指在Bootstrap的上下文菜单(Dropdown)中集成一个树形结构,使得用户可以在下拉选项中进行多级选择,这种功能在数据分类或层级关系展示时非常实用。 在Bootstrap中,下拉框...

    基于cookie实现ztree树刷新后,展开状态不变-demo

    本示例"基于cookie实现ztree树刷新后,展开状态不变-demo"着重解决了一个常见的用户体验问题:当用户在树形视图中展开或选择某些节点后,页面刷新时如何保持这些状态。`Cookie`技术在这里起到了关键作用,它可以存储...

    Css3折叠菜单-可展开的树形导航菜单.rar

    Css3折叠菜单-可展开的树形导航菜单,其实就是折叠、展开式的菜单,应用了HTML5重绘而成,无使用jquery,完全CSS3技术实现,面向Android手机等移动终端设备浏览,请注意不要使用IE等浏览器查看效果。

Global site tag (gtag.js) - Google Analytics