В чистой информатике null является действительным двоичным деревом. Он называется пустым двоичным деревом. Точно так же, как пустой набор все еще является допустимым набором. Кроме того, двоичное дерево с единственным корневым узлом и без детей также является допустимым (но не пустое). См. this Stack Overflow answer для получения дополнительной информации.
В практической реализации есть два способа сделать это.
Предположим, что действительное двоичное дерево должно иметь хотя бы один узел и не допускать пустые деревья. У каждого узла нет детей.Все рекурсивные методы в этом дереве не опускаются до уровня null. Скорее, они останавливаются, когда видят, что левый дочерний или правый дочерний узел узла имеет значение NULL. Эта реализация работает до тех пор, пока вы не передадите null в любое место, где ожидается дерево.
Предположим, что null является допустимым двоичным деревом (формально, просто пустым деревом). В этой реализации вы сначала проверяете, является ли указатель нулевым, прежде чем выполнять какие-либо операции над ним (например, проверка для детей влево/вправо и т. Д.). Эта реализация работает для любого указателя на дерево. Вы можете свободно передавать нулевые указатели на методы, ожидающие дерева.
Оба способа работы. Преимущество второй реализации заключается в гибкости. Вы можете передать null ко всему, что ожидает дерево, и оно не приведет к возникновению исключения. Первая реализация имеет то преимущество, что не тратит время на спуск на «дочерние узлы», которые являются нулевыми, и вам не нужно использовать нулевые проверки в начале каждой функции/метода, который работает на узле. Вместо этого вам просто нужно выполнить нулевые проверки для детей.
Это зависит от вашей реализации. Вы можете решить, что «null» является деревом, или вы можете решить, что дерево должно иметь что-то в нем. Пока вы согласны, все будет работать. – Teepeemm
Как правило, рекомендуется иметь общедоступный статический конечный EMPTY_TREE, который используется для пустого дерева. Таким образом, вы можете избежать всех этих ошибок, которые засоряют код, а также обойти NPE, когда вы их забыли. –