0 / 0 / 0
Регистрация: 14.11.2018
Сообщений: 2
1

HomeLisp: удаление из заданного бинарного дерева (списка) поддерево (подписок), имеющее корень со значением k

14.11.2018, 17:54. Показов 1426. Ответов 2

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, определить новую функцию, позволяющую удалять их заданного бинарного дерева (списка) поддерево (подписок), имеющее корень со значением k. Если такое поддерево с таким корнем k не единственное, то удалить все.

Например, есть список (1 (2 (4)(5)) (3 (6)(7))). Вводим k=2, удаляется подписок с корнем 2, т. е. (2(4)(5)). И в итоге получаем (1 (3(6)(7))).
Если k=4,то в итоге получаем (1 (2 (5)) (3 (6)(7))). Или если есть 2 подписка в списке с одним корнем k, то удаляются оба.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2018, 17:54
Ответы с готовыми решениями:

Homelisp: подсчитать количество вершин бинарного дерева, значение которых меньше заданного N
Дано бинарное дерево содержащее целые числа. Подсчитать количество вершин дерева, значение которого...

Дополнение списка с обоих концов Удаление элемента из дерева по указанным значением информационную атрибута
Дополнение списка с обоих концов Удаление элемента из дерева по указанным значением информационную...

Удаление из заданного списка все вхождения элемента с заданным значением информационной части
Написать программу, удаления из заданного списка все вхождения элемента с заданным значением...

Для каждого бинарного дерева выполнить преобразование дерева в список, результат вывести в виде списка списков
Объясните почему не работает, задание было таким " Дан список, элементы которого — непустые...

2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36354 / 20233 / 4211
Регистрация: 12.02.2012
Сообщений: 33,508
Записей в блоге: 13
14.11.2018, 19:35 2
Лучший ответ Сообщение было отмечено ArTeM TiToV как решение

Решение

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun del-root (lst k)
  (cond ((null lst) nil)
        ((listp (car lst)) 
         (if (and (numberp (caar lst))(= (caar lst) k))
             (del-root (cdr lst) k) 
             (cons (del-root (car lst) k) (del-root (cdr lst) k)))) 
        (t (cons (car lst) (del-root (cdr lst) k)))))
 
==> DEL-ROOT
 
(del-root '(1 (2 (4)(5)) (3 (6)(7))) 2)
==> (1 (3 (6) (7)))
 
(del-root '(1 (2 (4)(5)) (3 (6)(7))) 4)
==> (1 (2 (5)) (3 (6) (7)))
3
0 / 0 / 0
Регистрация: 14.11.2018
Сообщений: 2
19.11.2018, 11:55  [ТС] 3
Цитата Сообщение от Catstail Посмотреть сообщение
(defun del-root (lst k)
* (cond ((null lst) nil)
* * * * ((listp (car lst))
* * * * *(if (and (numberp (caar lst))(= (caar lst) k))
* * * * * * *(del-root (cdr lst) k)
* * * * * * *(cons (del-root (car lst) k) (del-root (cdr lst) k))))
* * * * (t (cons (car lst) (del-root (cdr lst) k)))))
==> DEL-ROOT
(del-root '(1 (2 (4)(5)) (3 (6)(7))) 2)
==> (1 (3 (6) (7)))
(del-root '(1 (2 (4)(5)) (3 (6)(7))) 4)
==> (1 (2 (5)) (3 (6) (7)))
Огромное вам спасибо!
0
19.11.2018, 11:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2018, 11:55
Помогаю со студенческими работами здесь

Найти в дереве самое широкое (узкое) поддерево имеющее заданную высоту
Помогите пожалуйста,нужно найти в дереве самое широкое (узкое) поддерево имеющее заданную высоту....

Обход правой части бинарного дерева (корень - уникальный элемент)
Здравствуйте, уважаемые форумчане! Снова придумал несложную задачу на бинарные деревья. Надеюсь,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru