Я пытаюсь достичь тестирования, если дерево является деревом AVL или не использует пролог.AVL Binary Heap (тест Balanace)
Я сделал тест высоты, который работает для тестов, которые я сделал до сих пор, но мой тест на балансировку по-прежнему не очень силен.
Это моя работа до сих пор:
avl('Branch'(LeftBranch,RightBranch)) :-
height(LeftBranch,H1),
height(RightBranch,H2),
abs(H1-H2) =< 1.
Я основан этот код из старой StackOverflow кода. Но это не работает во всех случаях. Будет включать мой код высоты. Где-то я сделал недоразумение, и я уверен, где его найти.
height(leaf(_),1).
height('Branch'(LeftBranch,RightBranch,H) :-
height(LeftBranch,H1),
height(RightBranch,H2),
H is max(H1,H2)+1.
Почему мой код не оценивает некоторые деревья?
Это нить я на основе моего balanace тест дерева, и я сделал попробовать его с деревом он писал в комментариях, но я не удалось, какие-то идеи?
бит запутанный, что такое h()? Невозможно ли это проверить только один аргумент? Я предпочитаю просто отправить дерево, чтобы избежать человеческих ошибок. – Anticipating
мы получаем два возможных результата из 'avl_height/2' в своем втором аргументе. Либо это «h (X)», где «X» - его высота, либо «не», сигнализируя, что это дерево не является AVL. Дерево AVL * почти * сбалансировано. –
Я делаю это на одном и том же дереве. Я получаю такой же результат, как если бы я делал это на сбалансированном дереве. – Anticipating