package splar.core.fm; import java.util.LinkedList; import java.util.List; public class FTTraversals { public static List<FeatureTreeNode> dfs(FeatureTreeNode node, FTTraversalNodeSelector selector) { List<FeatureTreeNode> nodes = new LinkedList<FeatureTreeNode>(); dfs(node, nodes, selector); return nodes; } public static List<FeatureTreeNode> bfs(FeatureTreeNode node, FTTraversalNodeSelector selector) { List<FeatureTreeNode> nodes = new LinkedList<FeatureTreeNode>(); bfs(node, nodes, selector); return nodes; } private static void dfs( FeatureTreeNode node, List<FeatureTreeNode> nodes, FTTraversalNodeSelector selector) { if ( node != null ) { if ( selector != null ) { if ( selector.select(node)) { nodes.add(node); } } } int count = node.getChildCount(); for( int i = 0 ; i < count ; i++ ) { dfs((FeatureTreeNode)node.getChildAt(i), nodes, selector); } } private static void bfs( FeatureTreeNode node, List<FeatureTreeNode> nodes, FTTraversalNodeSelector selector) { LinkedList<FeatureTreeNode> toProcess = new LinkedList<FeatureTreeNode>(); if ( node != null ) { toProcess.add(node); } while( !toProcess.isEmpty() ) { FeatureTreeNode curNode = toProcess.pollFirst(); if ( selector.select(curNode)) { nodes.add(curNode); } int count = curNode.getChildCount(); for( int i = 0 ; i < count ; i++ ) { toProcess.add((FeatureTreeNode)curNode.getChildAt(i)); } } } }