Почему не удается инициализировать объект, переданный в аргументе функции?
ох, кто тебя так учил писать? для начала все названия классов с большой буквы должны быть

private class node //создаем сам класснет, ничего ты тут не создаешь, а на самом деле описываешь какую то структуру, объект

public node root; //Создаём объектнет, ничего ты тут не создаешь, а только объявил переменную

        System.out.println(root.value); //Null pointer exceptionну естественно, root не был же создан у текущего объекта. А тут в общем то и в принципе нет кода для его задания

научись дебажить уже и разберись в самой элементарной терминологии, и хорошо бы все цепочку вызовов показать. Пытаешься список сделать? так в интернете же море примеров, разбирай
В Java аргументы передаются по значению. Грубо говоря, при вызове метода assign в его области видимости создаётся переменная newNode, в которую копируется адрес значения поля root. Оператор new выделяет область памяти в куче для объекта класса Node и возвращает его адрес в переменную newNode, перезаписывая в ней старое значение. После завершения метода assign переменная newNode перестаёт существовать вместе с записанным в неё адресом, а поле root так и остаётся со значением null.

P.S. Замечания в другом ответе тоже абсолютно справедливы.