bbs树形打印(一)

前言:大家在bbs回帖时常常可以看到树形的回复形式。

dfs设计

(1) 为使得Connection仅打开一次,因此以conn作为其中一个递归参数,在递归全程不关闭conn;

(2)根据存入数据的树状结构,由root的id逐层往下走;每到一个结点递归扫描该结点的子结点;

(3)打印时进行字符串拼接,故引入第三个递归参数:“level”;

数据准备:

create database bbs;

use bbs;

create table article
(
id int primary key auto_increment,
pid int,
rootid int,
title varchar(255),
cont text,
pdate datetime,
isleaf int
);

insert into article values (null, 0, 1, ‘蚂蚁大战大象‘, ‘蚂蚁大战大象‘, now(), 1);
insert into article values (null, 1, 1, ‘大象被打趴下了‘, ‘大象被打趴下了‘,now(), 1);
insert into article values (null, 2, 1, ‘蚂蚁也不好过‘,‘蚂蚁也不好过‘, now(), 0);
insert into article values (null, 2, 1, ‘瞎说‘, ‘瞎说‘, now(), 1);
insert into article values (null, 4, 1, ‘没有瞎说‘, ‘没有瞎说‘, now(), 0);
insert into article values (null, 1, 1, ‘怎么可能‘, ‘怎么可能‘, now(), 1);
insert into article values (null, 6, 1, ‘怎么没有可能‘, ‘怎么没有可能‘, now(), 0);
insert into article values (null, 6, 1, ‘可能性是很大的‘, ‘可能性是很大的‘, now(), 0);
insert into article values (null, 2, 1, ‘大象进医院了‘, ‘大象进医院了‘, now(), 1);
insert into article values (null, 9, 1, ‘护士是蚂蚁‘, ‘护士是蚂蚁‘, now(), 0);

java封装

package com.gdufe.bbs;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TreeShow {

    public static void main(String[] args) {
        TreeShow.show();
    }

    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost/bbs";
            conn = DriverManager.getConnection(url, "root", "1234");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void show() {
        try {
            Connection conn = TreeShow.getConnection();
            Statement st = conn.createStatement();
            String sql = "select * from article where pid=0";
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                System.out.println(rs.getInt("id") + rs.getString("cont"));
                tree(conn, rs.getInt("id"), 0);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void tree(Connection conn, int id, int level) {
        Statement st = null;
        ResultSet rs = null;
        StringBuffer preStr = new StringBuffer("    ");

        for (int i = 0; i < level; i++) {
            preStr.append("    ");
        }
        String sql = "select * from article where pid=" + id;
        try {
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            while (rs.next()) {
                System.out.println(preStr + "" + rs.getInt("id")
                        + rs.getString("cont"));
                if (rs.getInt("isleaf") != 0) {
                    tree(conn, rs.getInt("id"), level + 1);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

(注:为了方便代码理解,故意省去rs,st,conn的close()操作)

输出结果

1蚂蚁大战大象
    2大象被打趴下了
        3蚂蚁也不好过
        4瞎说
            5没有瞎说
        9大象进医院了
            10护士是蚂蚁
    6怎么可能
        7怎么没有可能
        8可能性是很大的
时间: 2024-10-07 06:33:29

bbs树形打印(一)的相关文章

C语言树形打印二叉树

学习二叉树时,如果能直观显示,测试程序的时候会方便许多. 实现树形打印的标准方法是利用队列,此处参考的是CSDN上的一篇文章:树状显示二叉树, 原程序使用C++实现,这里使用C. 算法中使用了两个队列,一个用于存储树的结点,另一个用于存储打印过程中每个结点对应的信息. 上一篇文章写了可以利用 void 指针来实现模板,这一次嫌麻烦没有用这个方法,复制粘贴了两个队列. 改天试一试能不能把 void 指针的赋值抽象成一套函数来用用. 如同上面那篇文章中介绍的,此打印程序的核心思想是利用父结点的坐标

【转】BBS树形结构的实现方法

网站上的树形回复是如何实现的. 有两种实现方法:1.用中值排序基数法实现树状结构. 2.用递归算法实现 1.----------------用中值排序基数法实现树状结构. 下面给出另一种使用“使用中值排序基数法”实现树状结构:一.主要思想:增加一个排序基数字段ordernum,回复同一根贴的贴子中插入贴子时,排序基数ordernum取两者的中值.    为了叙述的简洁,在此只讨论与树状结构有关的字段. 在表中增加三个冗余字段,rootid——用于记录根id,deep——用于记录回复的深度(为0时

树形打印lua table表

local print = print local tconcat = table.concat local tinsert = table.insert local srep = string.rep local type = type local pairs = pairs local tostring = tostring local next = next function print_lua_table (lua_table, indent) if not lua_table or t

递归获取文件列表(在控制台树形打印文件名)

import java.io.File; public class TestFile { public static void main(String[] args) { File file = new File("D:/A"); tree(file,0); } private static void tree(File f,int level) { String tabSpace = ""; for(int i=0; i<level;i++) { tabSp

反转二叉树 打印二叉树

代码: package com.qhong; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args) { TreeNode root =new TreeNode(0); TreeNode left=new TreeNode(1); TreeNode right=new Tre

Python高手之路【八】python基础之requests模块

1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 在Python的世界里,事情不应该这么麻烦. Requests 使用的是 urllib3,因此继承了它的所有特性.Request

Python——request模块

1.Requsets模块的安装 进入cmd cd C:\Python27\Scripts pip install requests 2.Requests模块的简单使用 1 #HTTP请求类型 2 #无参数的get类型 3 r = requests.get('http://httpbin.org/get') 4 #有参的get类型 5 payload = {'key1':'vaule1','key2':'value2'} 6 r = requests.get(url,params=payload)

Lua获取表中字段的名称

假设有下面这段代码 local t = { a = 1, b = { x = 1, y = 2} } 我传给你一个table, 想要知道这个table都有哪些字段,但是又不能直接获取,这时可以使用下面这个方法 for k, v in pairs (t) do print(tostring(k), v) end 可以看到, 把k用tostring函数转成字段串形式就OK了 但是我们还可以看到,当table中嵌套table的时候,嵌套的table无法打印出来,对于这种情况,难道就没有办法了吗?当然不

Python requests模块学习笔记

1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 在Python的世界里,事情不应该这么麻烦. Requests 使用的是 urllib3,因此继承了它的所有特性.Request