java树形结构

最近打算做一个bbs作为数据库的课程设计,并且打算将它作为今年的收官之战,所以想做的好一点,于是找了马士兵老师的bbs视频看了看,发现树形结构又忘了,在这里总结一下~

 实现树形结构必须使用递归,思想就是从pid为0的节点(根节点)开始找,判断它是否是叶子,若不是,则继续递归他(以这个节点的id为pid找到他的儿子们),直到它是叶子为止。

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;



public class Reg {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//通过db类得到connection,与普通的java链接数据库一样
        Connection conn = DB.getConnection();
        List<Article> list = new ArrayList<Article>(); //使用一个list来装节点
        Tree(conn,0,0,list);
}<pre name="code" class="java">public class Article {
   private int id;
   private int pid;
   private int rootid;
   private String title;
   private String cont;
   private Date pdate;
   private int isleaf;
   private int grade;
   
   //the method to initial 
   public void initial(ResultSet rs){
	  try {
		   setId(rs.getInt("id"));
		   setCont(rs.getString("cont"));
		   setPid(rs.getInt("pid"));
		   setCont(rs.getString("cont"));
		   setIsleaf(rs.getInt("isleaf"));
		   setRootid(rs.getInt("rootid"));
		   setTitle(rs.getString("title"));
		   setPdate(rs.getDate("pdate"));
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
   }
   

//grade表示在树中的层数,id表示的是找到以这个id为父节点的子节点public static void Tree(Connection conn,int id,int grade,List<Article> list){ //每次都找到以这个id对应的节点的儿子,开始为0(根) String sql = "select * from article where pid =" + id; try{ Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ Article a = new Article(); a.initial(rs);//这个方法去初始化a,将rs所指向的节点的值赋值到a那里 list.add(a); if(a.getIsleaf()!=0){ //重新以此时这个节点的id为pid,再找到它的儿子们,并且此时儿子们的grade加多了一层 Tree(conn,a.getId(),grade+1,list); } }}catch(Exception e){e.printStackTrace();}finally{//关闭conn等东西}}}

 article类: 


public class Article {
   private int id;
   private int pid;
   private int rootid;
   private String title;
   private String cont;
   private Date pdate;
   private int isleaf;
   private int grade;
   
   //the method to initial 
   public void initial(ResultSet rs){
	  try {
		   setId(rs.getInt("id"));
		   setCont(rs.getString("cont"));
		   setPid(rs.getInt("pid"));
		   setCont(rs.getString("cont"));
		   setIsleaf(rs.getInt("isleaf"));
		   setRootid(rs.getInt("rootid"));
		   setTitle(rs.getString("title"));
		   setPdate(rs.getDate("pdate"));
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
   }
   

总得来说就是这样,方便大家复习也方便自己哈哈~~(有热心人告诉我怎么把代码漂亮的添加进去么)??



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java树形结构的封装可以通过递归思路进行构建。可以定义一个树节点数据类,其中包含节点的ID、父节点ID、节点名称以及子节点列表等信息。可以使用Lombok库来简化代码,省略实体类的set()和get()方法。引入Lombok的Jar包后,可以使用@Data注解来自动生成这些方法。\[1\] 在树节点数据类中,可以定义入参和出参,使用泛型来处理通用的基本信息。可以使用@Builder注解来生成构建器方法,方便创建对象。\[2\] 另外,可以定义一个TreeNode类来表示每个节点的信息,包括节点ID、父节点ID、节点名称以及子节点列表。可以使用@Getter和@Setter注解来自动生成get和set方法。\[3\] 通过递归的方式,可以根据给定的数据构建树形结构。可以根据节点的父节点ID来递归地将节点添加到对应的父节点的子节点列表中,最终形成完整的树形结构。 这样封装的树形结构可以方便地返回给前端,并以下拉菜单等形式进行展示。 #### 引用[.reference_title] - *1* *3* [Java后端递归构建树形结构](https://blog.csdn.net/a18505947362/article/details/122458089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java代码封装的树型通用结构](https://blog.csdn.net/weixin_41905047/article/details/128889084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值