a.search(3)
будет работать, потому что значение a равно 3. Во всех остальных случаях этого не должно быть, потому что вы никогда не позволяли узлам подключаться. Для каждого из этих узлов, по крайней мере, на основании приведенного кода, нет левой или правой ветвей. Все они инициализируются значением None и никогда не устанавливаются на что-либо другое. Вы должны указать левую и правую ветку root, и тогда она должна работать.
Например, ваш класс должен иметь следующее:
def setLeft(self, node):
self._left = node
def setRight(self, node):
self._right = node
Затем используйте его как таковое:
a = TreeNode(3)
b = TreeNode(2)
c = TreeNode(4)
a.setLeft(b)
a.setRight(c)
a.search(4)
Конечно, вы должны изменить это в зависимости от того, как вы хотите структурировать дерево.