Java:

public static int nextInTree(BinNode<Queue<Integer>> lst )

{

        if(lst == null)

                return -1;

        Queue<Integer> q = lst.getValue();

        if( ! q.isEmpty() )

                return q.head();

        int left = nextInTree( lst.getLeft() );

        

        if(left != -1)

                return left;

        

        return nextInTree( lst.getRight() );

}

C#:

public static int NextInTree(BinNode<Queue<int>> lst )

{

        if(lst == null)

                return -1;

        Queue<int> q = lst.GetValue();

        if( ! q.IsEmpty() )

                return q.Head();

        int left = NextInTree( lst.GetLeft() );

        

        if(left != -1)

                return left;

        

        return NextInTree( lst.GetRight() );

}