Эта проблема не для задания, хотя это несколько типичная проблема с назначением, которую я пытаюсь решить по-другому.Метод рекурсивного шифрования дерева с использованием dfs
Я хочу написать метод, который будет рекурсивно проходить через двоичное дерево, используя алгоритм поиска глубины, чтобы найти совпадение для символа. Когда он найдет соответствующий символ, я хочу, чтобы он возвращал строку, которая отображает позицию символа в дереве с помощью 0 и 1. Например, «001» указывает, что символ найден, перейдя в левый узел корневого узла, левый узел этого узла, а затем в правый узел этого узла.
Вот код, который я до сих пор:
private static String encryptSearch(char c, BinaryNode curNode, String result)
{
char data = (char) curNode.getData();
if (data != c)
{
if (curNode.hasLeftChild())
{
result = result + "0";
encryptSearch(c, curNode.getLeftChild(), result);
}
if (curNode.hasRightChild())
{
result = result + "1";
encryptSearch(c, curNode.getRightChild(), result);
}
result = result.substring(0, result.length()-1);
}
return result;
}
Метод изначально отправлен символ, который будет искать, корневой узел, а нуль результата. Этот метод не возвращает ничего, кроме 0. Я думаю, что есть несколько проблем с моим кодом, но самый большой из них заключается в том, что когда поиск достигает листового узла, он возвращается. Я не мог придумать способ решения этой проблемы, все еще вернув строку. Я мог бы легко написать метод void, который действует на результирующую строку как внешнюю переменную, но я не хочу этого делать с целью упражнения. Любая помощь приветствуется!
Эй, спасибо за ответ! Это отличный метод, и я не думал об использовании StringBuilder, так что это действительно полезно. Однако моя проблема заключается в том, что я хотел, чтобы метод возвращал строку. Я все еще не могу придумать, как вернуть строку, не имея той же проблемы, что и исходный код. Это может быть невозможно, не уверен. – unityrkjs
Вы можете обернуть этот метод, используя другой метод, который возвращает String, если этот метод возвращает true, а пустая или пустая строка, если это возвращает false. – pulasthi7
Эй! Я знаю, что это старый пост сейчас, но я думаю, что код, который вы опубликовали, имеет некоторые ошибки. Я попробовал свой метод (с заполненными пробелами), а также с подобными, и обычно я получаю только 0 в переменной результата. Я думаю, что это имеет какое-то отношение к операторам return и ценности найденного значения, но я не могу понять, что. Есть идеи? – unityrkjs