> 技术文档 > java树形结构实现方式_java实现树形结构

java树形结构实现方式_java实现树形结构

在Java中实现树形结构的常见方式有以下几种,每种方法适用于不同的场景

1. 自定义节点类(基础实现)

通过定义节点类,包含子节点的集合(如 List),适合通用树结构。

class TreeNode { T data; List<TreeNode> children; public TreeNode(T data) { this.data = data; this.children = new ArrayList(); }}// 示例用法TreeNode root = new TreeNode(\"Root\");root.children.add(new TreeNode(\"Child1\"));

适用场景:多叉树、普通树结构。

2. 二叉树节点类

每个节点包含左、右子节点,适用于二叉树。

class BinaryTreeNode { T data; BinaryTreeNode left; BinaryTreeNode right; public BinaryTreeNode(T data) { this.data = data; }}// 示例用法BinaryTreeNode root = new BinaryTreeNode(1);root.left = new BinaryTreeNode(2);root.right = new BinaryTreeNode(3);

适用场景:二叉树、二叉搜索树、堆结构。

3. 数组表示法

使用数组存储节点,通过索引计算父子关系,适用于完全二叉树。

// 示例:完全二叉树的数组表示Integer[] treeArray = new Integer[10];treeArray[0] = 1; // 根节点treeArray[1] = 2; // 左子节点(索引0的左孩子)treeArray[2] = 3; // 右子节点(索引0的右孩子)

适用场景:堆、完全二叉树。

4. Map 表示法

使用 Map<T, List> 存储父子关系,适合快速查找子节点。

Map<String, List> treeMap = new HashMap();treeMap.put(\"Root\", Arrays.asList(\"Child1\", \"Child2\"));treeMap.put(\"Child1\", Arrays.asList(\"Grandchild1\"));

适用场景:需要快速查找子节点的场景(如某些算法题)。

5. Java集合框架的树结构

使用 TreeSet 或 TreeMap(基于红黑树实现,自动排序)。

TreeSet treeSet = new TreeSet();treeSet.add(3);treeSet.add(1); // 内部按升序排列(1, 3)TreeMap treeMap = new TreeMap();treeMap.put(\"B\", 2);treeMap.put(\"A\", 1); // 按键排序(A, B)

适用场景:需要有序存储或快速查找/插入/删除。

6. 邻接表表示法

使用列表或数组存储每个节点的邻接节点,适合处理图或树。

List<List> adjacencyList = new ArrayList();adjacencyList.add(Arrays.asList(1, 2)); // 根节点0的子节点1和2adjacencyList.add(new ArrayList()); // 节点1无子节点

适用场景:多叉树、图的遍历(如BFS/DFS)。

7. 第三方库

  • Apache Commons Collections: 提供 Tree 接口。

  • Google Guava: 使用 TreeTraverser 简化遍历。
// 示例:Guava的树遍历TreeTraverser<TreeNode> traverser = new TreeTraverser() { @Override public Iterable<TreeNode> children(TreeNode root) { return root.children; }};

适用场景:需要快速实现复杂操作(如遍历、查找)。

选择建议

  • 简单树结构:自定义节点类。

  • 完全二叉树:数组表示法(节省空间)。

  • 需自动排序TreeSet/TreeMap

  • 算法题或快速查找:Map或邻接表。

熊猫网