Это мой первый вопрос в StackOverFlow: Я изучаю интервью с помощью книги «Cracking code interview» (5th Edition), , и я решал следующую проблему:Использование класса оболочки вместо статических переменных
Внедрите функцию, чтобы проверить, является ли двоичное дерево двоичным деревом поиска (Q 4.5 стр. 86).
Прежде чем двигаться дальше, я хотел бы, чтобы напомнить вам разницу между двоичным деревом поиска для простого двоичного дерева:
Двоичного дерево поиска накладывает условие, что для всех узлов, то левые дети меньше или равны текущему узлу, что меньше всех правильных узлов.
Таким образом, одно из решений, предлагаемое книгой, заключается в том, чтобы сканировать дерево с помощью обхода в порядке и на лету, чтобы проверить, больше ли каждый посещенный нами узел, чем последний, и предполагает, что дерево не может имеют одинаковые значения:
public static int last_printed = Integer.MIN_VALUE;
public static boolean checkBST(TreeNode n) {
if(n == null) return true;
// Check/recurse left
if (!checkBST(n.left)) return false;
// Check current
if (n.data <= last_printed) return false;
last_printed = n.data;
// Check/recurse right
if (!checkBST(n.right)) return false;
return true; // All good!
}
Теперь здесь все хорошо, но в книге цитаты:
Если вам не нравится использование статических переменных, то вы можете настроить этот код для использования класса-оболочки для целого числа, как показано ниже:
Class WrapInt {
public int value;
}
После чтения на класс обертку все здесь и в других веб-сайтах я просто не мог прийти к выводу, как и почему я должен использовать класс-обертку здесь вместо статической переменной?
Спасибо за быстрый ответ. поэтому в основном для использования обертки мне нужно будет создать экземпляр и передать его как один из параметров функции? – vigdora
Да, потому что это позволяет checkBST оставаться статическим методом без сохранения. Затем он позволяет использовать метод из многопоточных потоков, поскольку глобальное состояние отсутствует. –