Как найти числа, меньшие, чем N в несортированном дереве. Мне задали этот вопрос на собеседовании. Мой ответ состоял в том, что я должен проверить все узлы, начиная с корня, или я сначала закажу дерево. Любые другие идеи?Как найти числа, меньшие, чем N в несортированном дереве
ответ
Если это несортированное дерево, вы должны проверить каждый узел по определению. Если вы должны проверить все, кроме одного узла, невозможно определить, следует ли увеличить счет на 1 или нет, не проверив последний узел.
Предполагая, что вам не разрешено изменять дерево (большинство вопросов, подобных этому, вам не нравится, когда вы изменяете структуру), вы точно смотрите на решение O(n)
. Однако тогда возникает вопрос, каким будет наилучший способ реализации решения. Потому что это дерево, ответ (и то, что искал интервьюер) почти наверняка рекурсия.
Если у нас есть класс, который выглядит примерно так (я предполагаю, что в общем случае дерева Если это бинарное дерево просто заменить детей с левым и правым.):
public class TreeNode{
private int val;
private Set<TreeNode> children;
}
Тогда мы можем добавить меньше, чем N метод класса как такового:
public class TreeNode{
private int val;
private Set<TreeNode> children;
public int lessThanNCount(int n){
int count = (val < n ? 1 : 0);
if(children != null){
for(TreeNode tn : children){
count += tn.lessThanNCount(n);
}
}
return count;
}
}
Если ваша цель состоит в том, чтобы собрать цифры, а не получить количество из них, то попробуйте следующее:
public class TreeNode{
private int val;
private Set<TreeNode> children;
public ArrayList<Integer> lessThanNVals(int n){
ArrayList<Integer> vals = new ArrayList<Integer>();
if(val < n) vals.add(val);
if(children != null){
for(TreeNode tn : children){
vals.addAll(tn.lessThanNCount(n));
}
}
return vals;
}
}
- 1. найти путь в двоичном несортированном дереве
- 2. Поиск в несортированном дереве рекурсивно
- 3. Поиск строки в несортированном двоичном дереве
- 4. найти номер в несортированном массиве
- 5. Поиск двух строк в несортированном двоичном дереве
- 6. Как создать список выбора, содержащий только числа, меньшие, чем $ x
- 7. Как найти ближайший двойной в несортированном массиве
- 8. Как найти k-й наибольший элемент в несортированном массиве длины n в O (n)?
- 9. Найти n-й цифру числа
- 10. Разделение целого числа на меньшие целые числа
- 11. найти приблизительную медиану в несортированном списке
- 12. Найти все ключи, меньшие, чем x в массиве min-heap
- 13. Как найти n-го предка узла в двоичном дереве поиска?
- 14. Как найти n-й узел в двоичном дереве?
- 15. Как найти n-й узел в небиновом дереве?
- 16. Поиск недостающего числа в несортированном массиве с повторяющимися значениями
- 17. Как найти минимальное значение числа n цифр?
- 18. Найти ранг элемента в несортированном массиве по сложности: O (lg n). Любой другой лучший подход, чем этот?
- 19. Бесконечный цикл при замене узла в несортированном дереве
- 20. Найти наивысший фактор меньше, чем n
- 21. Определение разницы меньше, чем среднее значение в несортированном массиве?
- 22. Найти первый ключ больше, чем X в двоичном дереве поиска
- 23. , сообщающий все простые числа меньше, чем n
- 24. Как получить ребенка в n-образном дереве?
- 25. Как найти листовой узел в двоичном дереве NOT SORTED
- 26. Найти все пары в несортированном массиве
- 27. Исключить меньшие значения, чем порог в R
- 28. Как найти проект в дереве?
- 29. Как найти родителя в дереве
- 30. Как найти предшественника в дереве