Tree_Iterator
Provides simple operations for traversing a tree.
Works with any tree structure providing that you can return the set of children for a node when requested.
FindInTree
Searches the tree for a child that satisfies a condition.
As soon as we find a child that satisfies the condition the tree traversal stops.
/// search the tree for the 'theOne'.
var theOne = findInTree<SMCState>(virtualRoot, (node) => node.children, (node) => node.isTheOne);
traverseTree
Traverses the entire tree calling an function on each child.
Traversal continues until the entire tree has been traversed on the call to 'processChild' returns false.
traverseTree<SMCState>(root, (node) => node.children, (node) {
print(node);
/// return false if you want to stop traversal
return true;
});
TODO:
-
change algoritm to use iteration rather than recursion.
-
add an iterator for us in a for loop.
-
offer breadth first and depth first operations.
e.g.
var theOne = findInTree<SMCState>(virtualRoot, (node) => node.children, (node) => node.isTheOne, method: TreeInterator.depthFirst);
Credits
The project contains code from:
https://github.com/mkobuolys/flutter-design-patterns
Currently this code isn't in use but the plan is to take its breadth first/depth first algorithms and implement them into this pacagek.