BinaryTreeTraverser.java 2.63 KB
package com.google.common.collect;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import java.util.ArrayDeque;
import java.util.BitSet;
import java.util.Deque;
import java.util.Iterator;

@Beta
@GwtCompatible(emulated=true)
public abstract class BinaryTreeTraverser<T>
  extends TreeTraverser<T>
{
  public final Iterable<T> children(final T paramT)
  {
    Preconditions.checkNotNull(paramT);
    new FluentIterable()
    {
      public final Iterator<T> iterator()
      {
        new AbstractIterator()
        {
          boolean a;
          boolean b;
          
          protected final T computeNext()
          {
            Optional localOptional;
            if (!this.a)
            {
              this.a = true;
              localOptional = BinaryTreeTraverser.this.leftChild(BinaryTreeTraverser.1.this.a);
              if (localOptional.isPresent()) {
                return (T)localOptional.get();
              }
            }
            if (!this.b)
            {
              this.b = true;
              localOptional = BinaryTreeTraverser.this.rightChild(BinaryTreeTraverser.1.this.a);
              if (localOptional.isPresent()) {
                return (T)localOptional.get();
              }
            }
            return (T)endOfData();
          }
        };
      }
    };
  }
  
  public final FluentIterable<T> inOrderTraversal(final T paramT)
  {
    Preconditions.checkNotNull(paramT);
    new FluentIterable() {};
  }
  
  public abstract Optional<T> leftChild(T paramT);
  
  public abstract Optional<T> rightChild(T paramT);
  
  final class a
    extends AbstractIterator<T>
  {
    private final Deque<T> b = new ArrayDeque();
    private final BitSet c = new BitSet();
    
    a()
    {
      Object localObject;
      this.b.addLast(localObject);
    }
    
    protected final T computeNext()
    {
      while (!this.b.isEmpty())
      {
        Object localObject = this.b.getLast();
        if (this.c.get(this.b.size() - 1))
        {
          this.b.removeLast();
          this.c.clear(this.b.size());
          BinaryTreeTraverser.a(this.b, BinaryTreeTraverser.this.rightChild(localObject));
          return (T)localObject;
        }
        this.c.set(this.b.size() - 1);
        BinaryTreeTraverser.a(this.b, BinaryTreeTraverser.this.leftChild(localObject));
      }
      return (T)endOfData();
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/collect/BinaryTreeTraverser.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */