@Beta @GwtCompatible public abstract class TreeTraverser<T> extends Object
T
as nodes in a tree, and provides methods to traverse the trees
induced by this traverser.
For example, the tree
h
/ | \
/ e \
d g
/|\ |
/ | \ f
a b c
can be iterated over in preorder (hdabcegf), postorder (abcdefgh), or breadth-first order (hdegabcf).
Null nodes are strictly forbidden.
For Java 8 users: Because this is an abstract class, not an interface, you can't use a lambda expression to extend it:
// won't work
TreeTraverser<NodeType> traverser = node -> node.getChildNodes();
Instead, you can pass a lambda expression to the using
factory method:
TreeTraverser<NodeType> traverser = TreeTraverser.using(node -> node.getChildNodes());
Constructor and Description |
---|
TreeTraverser() |
Modifier and Type | Method and Description |
---|---|
FluentIterable<T> |
breadthFirstTraversal(T root)
Returns an unmodifiable iterable over the nodes in a tree structure, using breadth-first
traversal.
|
abstract Iterable<T> |
children(T root)
Returns the children of the specified node.
|
FluentIterable<T> |
postOrderTraversal(T root)
Returns an unmodifiable iterable over the nodes in a tree structure, using post-order
traversal.
|
FluentIterable<T> |
preOrderTraversal(T root)
Returns an unmodifiable iterable over the nodes in a tree structure, using pre-order
traversal.
|
static <T> TreeTraverser<T> |
using(Function<T,? extends Iterable<T>> nodeToChildrenFunction)
Returns a tree traverser that uses the given function to navigate from a node to its children.
|
public TreeTraverser()
public static <T> TreeTraverser<T> using(Function<T,? extends Iterable<T>> nodeToChildrenFunction)
TreeTraverser
and implement its children(T)
method directly.public abstract Iterable<T> children(T root)
public final FluentIterable<T> preOrderTraversal(T root)
No guarantees are made about the behavior of the traversal when nodes change while
iteration is in progress or when the iterators generated by children(T)
are advanced.
public final FluentIterable<T> postOrderTraversal(T root)
No guarantees are made about the behavior of the traversal when nodes change while
iteration is in progress or when the iterators generated by children(T)
are advanced.
public final FluentIterable<T> breadthFirstTraversal(T root)
No guarantees are made about the behavior of the traversal when nodes change while
iteration is in progress or when the iterators generated by children(T)
are advanced.
Copyright © 2010-2017. All Rights Reserved.