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