Я хочу создать двоичное дерево с определенной глубиной. Мой код до сих пор создает бинарные деревья до определенной максимальной глубины, но также создает деревья с более низкой максимальной глубиной. Я проиллюстрирую свою проблему ниже.Рекурсивно создавать двоичное дерево на определенной глубине
Мой код до сих пор (метод называется create
):
public class BT<E>{
E value;
BT<E> left, right;
public BT(E value)
{
this.value=value;
}
public BT (E value, BT left, BT right)
{
this.value = value;
this.left = left;
this.right = right;
}
private static final String[] random = {"a","b","c","d"};
public static BT create(int depth) {
if (depth > 1 && random.nextBoolean())//if not at the maximum depth
//choose randomly a,b,c,d - nextBoolean ensures it is not balanced all the time
{
String random = OPERATORS[random.nextInt(OPERATORS.length)];
return new BT(operator, create(depth-1), create(depth-1));//recursively create tree
}
else {//when node is a leaf node, make it X
String t = "x";
return new BT(t);
}
}
}
Проблема: Если я ввода 3 в глубину она должна создавать деревья, как это ТОЛЬКО:
(c) (d) (a)
(b) (a) (b) (d) (c)
(x)(x)(x)(x) (x) (x) (x)
Мой код в настоящее время создает деревья, как указано выше, но также включает в себя такие деревья, как:
(x) (c) (d)
(x) (x) (x)
Очевидно, что это не глубина 3. Я не хочу этого. I только хочу первый без этих исключений.
Может ли кто-нибудь взглянуть на мой код и рассказать мне, что я делаю неправильно и как его исправить.
Ваше определение глубины не соответствует тому, как я ее видел. Глубина - это максимальная длина (или количество ребер) от корня до листа. Деревья, которые вы говорите, должны отображаться, когда глубина = 3 на самом деле имеет глубину 2. –