code: public ADTNode<S, I, O> sift(final SymbolQueryOracle<I, O> oracle,
                                   final Word<I> word,
                                   final ADTNode<S, I, O> subtree) {
  
          ADTNode<S, I, O> current = subtree;
  
          while (!ADTUtil.isLeafNode(current)) {
              current = current.sift(oracle, word);
          }
  
          return current;
      }
docs: Successively sifts a word through the ADT induced by the given node. Stops when reaching a leaf.
  
  @param word
  the word to sift
  @param subtree
  the node whose subtree is considered
  
  @return the leaf (see {@link ADTNode#sift(SymbolQueryOracle, Word)})