Этот вопрос относится к https://leetcode.com/problems/unique-binary-search-trees-ii
Я пытаюсь реализовать универсальную функцию, которая генерирует все структурно эквивалентные BST с заданным диапазоном последовательных целочисленных значений [m...n]
, где n>=m
. Идея состоит в том, что если размер этого диапазона (т. Е. n-m+1
) одинаков, то независимо от выбора n
и m
число структурно эквивалентных деревьев должно быть одинаковым. Например, у нас могут быть (n,m) = (1,9)
и (n,m) = (5,13)
, где размер обоих равен 9. Эти 2 диапазона будут генерировать одинаковые BST с точки зрения структуры, за исключением того, что значения различны. В этом случае мы поменялись бы 1 на 5, 2 на 6, .... и 9 на 13, или наоборот. Другими словами, после генерации всех структурно эквивалентных BST для (n,m) = (1,9)
я хочу иметь возможность использовать это, чтобы легко поменять значения в [1 ... 9] для [5 ... 13] без необходимости регенерации BSTs.
Итак, я хочу спроектировать некоторую функцию, которая генерирует структурно эквивалентные деревья для некоторого ввода n-m+1
, сохранит эти структурно эквивалентные BST, а затем сможет подключить любой n,m
и даст мне все структурно эквивалентные с узловыми значениями в диапазоне [n ... m]. Я не хочу регенерировать BST для будущих входов того же размера диапазона.
Проблема Leetcode определяет узел BST как
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
Возможно ли это с помощью определения этого TreeNode
? Значение, которое оно хранит, имеет тип int
. Если бы он был типа int *
, то я мог бы придумать, как это сделать, но текущее определение кажется проблематичным.