import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** 树状结构* ** @param <T> 树中数据的类型*/
public class Tree<T>
{private T data;/*** 子树(节点)*/private List<Tree<T>> childs;/*** 父节点*/private Tree<T> parent;private Long parentId;public Tree(){data = null;childs = new ArrayList<>();childs.clear();}public Tree(T data){this.data = data;childs = new ArrayList<>();childs.clear();}/*** 添加子树* * @param tree 子树*/public void addNode(Tree<T> tree){childs.add(tree);tree.setParent(this);}public Long getParentId(){return parentId;}public void setParentId(Long parentId){this.parentId = parentId;}/*** 置空树*/public void clearTree(){data = null;parent = null;childs.clear();}/*** 求树的深度* * @return 树的深度*/public int dept(){return dept(this);}/*** 求树的深度* * @param tree* @return*/private int dept(Tree<T> tree){if (tree.isEmpty()){return 0;}else if (tree.isLeaf()){return 1;}else{int n = childs.size();int[] a = new int[n];for (int i = 0; i < n; i++){if (childs.get(i).isEmpty()){a[i] = 0 + 1;}else{a[i] = dept(childs.get(i)) + 1;}}Arrays.sort(a);return a[n - 1];}}/*** 获取父树(节点)* * @return*/public Tree<T> getParent(){return parent;}public void setParent(Tree<T> parent){this.parent = parent;}public boolean hasParent(){return parent != null;}/*** 返回第i个子树* * @param i* @return*/public Tree<T> getChild(int i){return childs.get(i);}/*** 求第一个孩子 结点* * @return*/public Tree<T> getFirstChild(){return childs.get(0);}/*** 求最后 一个孩子结点* * @return*/public Tree<T> getLastChild(){return childs.get(childs.size() - 1);}/*** 获取子树* * @return*/public List<Tree<T>> getChilds(){return childs;}/*** 判断是否为空树* * @return 如果为空,返回true,否则返回false*/public boolean isEmpty(){if (childs.isEmpty() && data == null){return true;}return false;}/*** 判断是否为叶子结点* * @return*/public boolean isLeaf(){if (childs.isEmpty()){return true;}return false;}public T getData(){return this.data;}/*** 求结点数* * @return 结点的个数*/public int size(){return size(this);}/*** 求结点数,有待完善* * @param tree* @return*/private int size(Tree<T> tree){if (tree.isEmpty()){return 0;}else if (tree.isLeaf()){return 1;}else{int count = 1;int n = childs.size();for (int i = 0; i < n; i++){if (!childs.get(i).isEmpty()){count += size(childs.get(i));}}return count;}}public static void main(String[] args){Tree<String> tc = new Tree<String>("root");tc.addNode(new Tree("A"));tc.addNode(new Tree("B"));System.out.println("树的深度为:" + tc.dept());List<Tree<String>> list = tc.getChilds();System.out.println("子节点为:");for (Tree<String> node : list){System.out.println(node);}}@Overridepublic String toString(){return "Tree [data=" + data + "]";}
}

该Tree类有三个主要属性为父子节点引用和数据:

data用于保存数据

parent为父节点引用

childs为子节点引用

Tree树结构java实现相关推荐

  1. Java将List列表转换为Tree树结构的方法

    本文介绍如何从数据库中读取List列表数据并将其转换为Tree树结构数据.从而可以完整展现其中的层级关系. 1.表结构 本次以商品分类为例,表结构设计支持多级商品分类,理论上可以无限向下创建下级分类. ...

  2. 树结构(Java实现)

    树结构基础 树的常用术语 二叉树概念 代码实现 package com.xz.tree;/*** @author 许正* @version 1.0*/ public class ArrBinaryTr ...

  3. 【数据结构】初入数据结构的树(Tree)以及Java代码实现(一)

    初入数据结构的树(Tree)以及Java代码实现(一) 树的定义 为什么叫树? 树型结构的元素具有一对多关系 树的定义 树的一些基本概念 树的结点 后代,祖先 子树.空树 树的度与高(深度),结点的度 ...

  4. 修改element-ui tree树结构前的图标,及树形结构的样式

    因项目需求,需修改tree树结构的图标,以及树形的字体样式等: 代码如下: <template><div class="FormMaintain">< ...

  5. java递归获取树结构的指定层级、指定层级之上(向上递归(包含父集所有、爷爷集所有...)(父集单独、爷爷集单独...))、指定层级之下所有的(子集、孙子集...)和list集合转Tree树结构

    实体类 package com.ruoyi.system.test;import lombok.Data;import java.util.ArrayList; import java.util.Li ...

  6. 二叉搜索树(Binary Search Tree)(Java实现)

    文章目录 1.二叉搜索树 1.1. 基本概念 1.2.树的节点(BinaryNode) 1.3.构造器和成员变量 1.3.公共方法(public method) 1.4.比较函数 1.5.contai ...

  7. Balanced Binary Tree leetcode java

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  8. LeetCode算法题-Minimum Depth of Binary Tree(Java实现)

    这是悦乐书的第168次更新,第170篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第27题(顺位题号是111).给定二叉树,找到它的最小深度.最小深度是沿从根节点到最近的 ...

  9. LeetCode_Convert Sorted Array to Binary Search Tree(Java实现)

    题目描述: 给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST). Given an array where elements are sorted in ascending order, co ...

最新文章

  1. 厦门大学江保详:缺陷检测的讲解!
  2. Java - PriorityQueue
  3. meta常用标签总结
  4. 计算找到出现最多的数字和次数 ,实现数组去重 ,进行排序。
  5. android 更改edittext内容,Android如何实时更改edittext的内容
  6. vaps 程序直接通信
  7. 鸿蒙适配倒计时,华为鸿蒙OS2.0手机系统定档 鸿蒙OS2.0上线倒计时
  8. Linux系统下如何配置SSH?如何开启SSH?
  9. ios uiview动画_iOS UIView动画
  10. 32.go defer
  11. 电机与拖动matlab仿真,电机与拖动MATLAB仿真与学习指导(普通高等教育十一五电气信息类规划教材)...
  12. 小技巧之chrome浏览器安装淘宝比价插件
  13. CSS3与页面布局学习总结(四)——页面布局大全
  14. 格式工厂怎么将qlv转换成mp4 转换方法最新
  15. 电脑坏了怎么把硬盘的mysql数据恢复_硬盘坏了怎么恢复数据?
  16. SwiftUI基础——创建并组合视图
  17. 无胁科技-TVD每日漏洞情报-2022-9-15
  18. rabbitmq简介及安装
  19. 胖哈勃杯第十三届CUIT校赛web500wp及出题心得
  20. 【wechat】微信开发——OAuth2.0网页授权

热门文章

  1. 【白皮书分享】2022年中国品质直播选型与应用白皮书.pdf(附下载链接)
  2. 【报告分享】直播电商生态进化论-2020直播电商行业研究报告.pdf(附下载链接)...
  3. Shape Completion using 3D-Encoder-Predictor CNNs and Shape Synthesis 第二部分
  4. 【干货】Kaggle 数据挖掘比赛经验分享
  5. android 将bitmap存为 bmp格式图片大小,把bitmap保存成 BMP的格式 并且位深度为1
  6. python对于字典d d.get(x、y)_给定字典 d ,哪个选项对 d.get(x, y) 的描述是正确的?_学小易找答案...
  7. 吴恩达机器学习学习笔记第二章:单变量线性回归
  8. 机器学习实战(十)Apriori(关联分析)
  9. 机器学习-吴恩达-笔记-8-支持向量机
  10. C++ 一定要使用strcpy_s()函数 等来操作方法c_str()返回的指针