Форматирование сериализации двоичного дерева поиска - PullRequest
0 голосов
/ 29 июня 2018

Я создал функцию для сериализации двоичного дерева сортировки. Я перебираю дерево в предзаказе, поэтому Root -> Left -> Right и рекурсивно строю строку.

function serialize(root, str = '') {
    if (root !== undefined) {
        str += root.data + ', ' + serialize(root.left) + serialize(root.right);
        return str;
    } else {
        return '';
    }
}

Мой вывод "8, 3, 1, 6, 4, 7, 10, 14, 13, ", и я пытаюсь найти способ убрать трейлинг , и whitespace.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Вам нужно проверить, есть ли у вашего узла левый или правый лист, прежде чем рекурсивно вызывать serialize, и это решит вашу проблему.

function serialize(root, str = '') {
    if (root) {
        str += root.data;
        if (root.left) {
            str += ', ' + serialize(root.left);
        }
        if (root.right) {
            str += ', ' +  serialize(root.right);
        }
    } 
    return str;
}
0 голосов
/ 29 июня 2018

Вот, пожалуйста.

Сначала необходимо удалить последний пробел с помощью str.trim () , а затем удалить последнюю запятую с помощью str.substring () .

Ниже полный рабочий код:

var str = "8, 3, 1, 6, 4, 7, 10, 14, 13, ";

str = str.trim();

console.log(str.substring(0, str.length - 1));
0 голосов
/ 29 июня 2018

Используйте str.trim() для удаления whitespace и ,

...