Class TreeTraverser

java.lang.Object
cloud.opencode.base.tree.TreeTraverser

public final class TreeTraverser extends Object
Tree Traverser - Advanced tree traversal utilities 树遍历器 - 高级树遍历工具

Provides comprehensive traversal operations including controlled traversal, transformation, reduction, and stream-based operations.

提供全面的遍历操作,包括受控遍历、转换、归约和基于流的操作。

Features | 主要功能:

  • Controlled traversal (skip, stop) - 受控遍历(跳过、停止)
  • Parallel traversal - 并行遍历
  • Stream-based operations - 基于流的操作
  • Transform/reduce operations - 转换/归约操作
  • Iterator support - 迭代器支持
  • Ancestor/descendant queries - 祖先/后代查询

Usage Examples | 使用示例:

// Stream all nodes - 流式处理所有节点
TreeTraverser.stream(root)
    .filter(node -> node.getData() != null)
    .forEach(System.out::println);

// Controlled traversal - 受控遍历
TreeTraverser.traverse(root, node -> {
    if (shouldSkip(node)) return TraversalControl.SKIP_SUBTREE;
    if (shouldStop(node)) return TraversalControl.STOP;
    return TraversalControl.CONTINUE;
});

// Transform tree - 转换树
TreeNode<String> transformed = TreeTraverser.map(root, node -> node.toString());

// Reduce tree - 归约树
int sum = TreeTraverser.reduce(root, 0, (acc, node) -> acc + node.getValue());

Security | 安全性:

  • Thread-safe: Yes (stateless utility class) - 线程安全: 是(无状态工具类)
  • Null-safe: No (null root will cause NullPointerException) - 空值安全: 否(null根节点会导致空指针异常)
Since:
JDK 25, opencode-base-tree V1.0.0
Author:
Leon Soo www.LeonSoo.com
See Also:
  • Method Details

    • traverse

      public static <T> boolean traverse(TreeNode<T> root, TreeTraverser.ControlledVisitor<T> visitor)
      Traverses tree with control 带控制的树遍历
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      root - root node | 根节点
      visitor - visitor with control | 带控制的访问者
      Returns:
      true if completed without stop | 如果完成且未停止则为true
    • traverse

      public static <T extends Treeable<T,ID>, ID> boolean traverse(List<T> roots, Function<T, TreeTraverser.TraversalControl> visitor)
      Traverses Treeable nodes with control 带控制的Treeable节点遍历
      Type Parameters:
      T - node type | 节点类型
      ID - ID type | ID类型
      Parameters:
      roots - root nodes | 根节点列表
      visitor - visitor with control | 带控制的访问者
      Returns:
      true if completed without stop | 如果完成且未停止则为true
    • stream

      public static <T> Stream<TreeNode<T>> stream(TreeNode<T> root)
      Creates a pre-order stream of TreeNode 创建TreeNode的前序流
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      root - root node | 根节点
      Returns:
      stream of nodes | 节点流
    • stream

      public static <T extends Treeable<T,ID>, ID> Stream<T> stream(List<T> roots)
      Creates a pre-order stream of Treeable nodes 创建Treeable节点的前序流
      Type Parameters:
      T - node type | 节点类型
      ID - ID type | ID类型
      Parameters:
      roots - root nodes | 根节点列表
      Returns:
      stream of nodes | 节点流
    • parallelStream

      public static <T> Stream<TreeNode<T>> parallelStream(TreeNode<T> root)
      Creates a parallel stream 创建并行流
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      root - root node | 根节点
      Returns:
      parallel stream of nodes | 节点并行流
    • breadthFirstStream

      public static <T> Stream<TreeNode<T>> breadthFirstStream(TreeNode<T> root)
      Creates a breadth-first stream 创建广度优先流
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      root - root node | 根节点
      Returns:
      stream of nodes | 节点流
    • postOrderStream

      public static <T> Stream<TreeNode<T>> postOrderStream(TreeNode<T> root)
      Creates a post-order stream 创建后序流
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      root - root node | 根节点
      Returns:
      stream of nodes | 节点流
    • preOrderIterator

      public static <T> Iterator<TreeNode<T>> preOrderIterator(TreeNode<T> root)
      Creates a pre-order iterator 创建前序迭代器
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      root - root node | 根节点
      Returns:
      iterator | 迭代器
    • preOrderIterator

      public static <T extends Treeable<T,ID>, ID> Iterator<T> preOrderIterator(List<T> roots)
      Creates a pre-order iterator for Treeable 创建Treeable的前序迭代器
      Type Parameters:
      T - node type | 节点类型
      ID - ID type | ID类型
      Parameters:
      roots - root nodes | 根节点列表
      Returns:
      iterator | 迭代器
    • breadthFirstIterator

      public static <T> Iterator<TreeNode<T>> breadthFirstIterator(TreeNode<T> root)
      Creates a breadth-first iterator 创建广度优先迭代器
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      root - root node | 根节点
      Returns:
      iterator | 迭代器
    • postOrderIterator

      public static <T> Iterator<TreeNode<T>> postOrderIterator(TreeNode<T> root)
      Creates a post-order iterator 创建后序迭代器
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      root - root node | 根节点
      Returns:
      iterator | 迭代器
    • map

      public static <T,R> TreeNode<R> map(TreeNode<T> root, Function<T,R> mapper)
      Maps tree to new data type 将树映射到新数据类型
      Type Parameters:
      T - source type | 源类型
      R - result type | 结果类型
      Parameters:
      root - root node | 根节点
      mapper - data mapper | 数据映射器
      Returns:
      mapped tree | 映射后的树
    • mapNode

      public static <T,R> TreeNode<R> mapNode(TreeNode<T> root, Function<TreeNode<T>, R> mapper)
      Maps tree with node context 带节点上下文的树映射
      Type Parameters:
      T - source type | 源类型
      R - result type | 结果类型
      Parameters:
      root - root node | 根节点
      mapper - node mapper | 节点映射器
      Returns:
      mapped tree | 映射后的树
    • flatMap

      public static <T,R> Stream<R> flatMap(TreeNode<T> root, Function<TreeNode<T>, Stream<R>> mapper)
      Flat maps tree to stream 扁平映射树到流
      Type Parameters:
      T - source type | 源类型
      R - result type | 结果类型
      Parameters:
      root - root node | 根节点
      mapper - node to stream mapper | 节点到流映射器
      Returns:
      flattened stream | 扁平化流
    • reduce

      public static <T,R> R reduce(TreeNode<T> root, R identity, BiFunction<R,T,R> accumulator)
      Reduces tree to single value 将树归约为单个值
      Type Parameters:
      T - data type | 数据类型
      R - result type | 结果类型
      Parameters:
      root - root node | 根节点
      identity - initial value | 初始值
      accumulator - accumulator | 累加器
      Returns:
      reduced value | 归约值
    • reduce

      public static <T,R> R reduce(TreeNode<T> root, R identity, BiFunction<R,T,R> accumulator, BinaryOperator<R> combiner)
      Reduces tree with combiner (for parallel) 带组合器的树归约(用于并行)
      Type Parameters:
      T - data type | 数据类型
      R - result type | 结果类型
      Parameters:
      root - root node | 根节点
      identity - initial value | 初始值
      accumulator - accumulator | 累加器
      combiner - combiner | 组合器
      Returns:
      reduced value | 归约值
    • foldBottomUp

      public static <T,R> R foldBottomUp(TreeNode<T> root, Function<T,R> leafMapper, BiFunction<T,List<R>,R> branchFolder)
      Folds tree bottom-up 自底向上折叠树
      Type Parameters:
      T - data type | 数据类型
      R - result type | 结果类型
      Parameters:
      root - root node | 根节点
      leafMapper - leaf node mapper | 叶节点映射器
      branchFolder - branch folder | 分支折叠器
      Returns:
      folded value | 折叠值
    • getDescendants

      public static <T> List<TreeNode<T>> getDescendants(TreeNode<T> node)
      Gets all descendants 获取所有后代
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      node - node | 节点
      Returns:
      list of descendants | 后代列表
    • getSiblings

      public static <T> List<TreeNode<T>> getSiblings(TreeNode<T> node)
      Gets all siblings 获取所有兄弟节点
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      node - node | 节点
      Returns:
      list of siblings | 兄弟节点列表
    • getAncestors

      public static <T> List<TreeNode<T>> getAncestors(TreeNode<T> node)
      Gets ancestors from parent to root 获取从父节点到根节点的祖先
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      node - node | 节点
      Returns:
      list of ancestors | 祖先列表
    • getDepth

      public static <T> int getDepth(TreeNode<T> node)
      Gets the depth of a node 获取节点深度
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      node - node | 节点
      Returns:
      depth (0 for root) | 深度(根节点为0)
    • findLowestCommonAncestor

      public static <T> TreeNode<T> findLowestCommonAncestor(TreeNode<T> node1, TreeNode<T> node2)
      Finds lowest common ancestor 查找最近公共祖先
      Type Parameters:
      T - data type | 数据类型
      Parameters:
      node1 - first node | 第一个节点
      node2 - second node | 第二个节点
      Returns:
      lowest common ancestor or null | 最近公共祖先或null