Advertisement
Guest User

Untitled

a guest
Dec 7th, 2018
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 3.05 KB | None | 0 0
  1. % Autor:
  2. % Datum: 02.12.2018
  3.  
  4.  mmax(Z1,Z2,Z1) :- Z1 >= Z2,!.
  5.  mmax(Z1,Z2,Z2) :- Z2 >= Z1,!.
  6.  
  7. %
  8. %  is_sbin_tree(nil).
  9. %  is_sbin_tree(t(W,H,L,R)) :- number(W),
  10. %                              is_sbin_tree(L, 0, W, H1), %links
  11. %                              is_sbin_tree(R, W, inf, H2), %rechts
  12. %                              mmax(H1,H2,HMax),
  13. %                              H is HMax.
  14.  
  15.  is_sbin_tree(T) :- is_sbin_tree(T, 0, inf, _).
  16.  is_sbin_tree(nil,_,_,1).
  17.  %HMax +1 damit die Höhe nach oben hin größer wird, weil die Wurzel die höchste Höhe hat
  18.  is_sbin_tree(t(W,H,L,R),LowerBound,UpperBound,HMax + 1) :- number(W),
  19.                                           W >= LowerBound,
  20.                                           W < UpperBound,
  21.                                           is_sbin_tree(L, LowerBound, W, H1),  %links
  22.                                           is_sbin_tree(R, W, UpperBound, H2),  %rechts
  23.                                           mmax(H1,H2,HMax),
  24.                                           H is HMax.
  25.  
  26.  
  27.  
  28. insert_sbin_tree(Element, Tree, NewTree) :- insert_sbin_tree(Element, Tree, NewTree, _),!.
  29. insert_sbin_tree(Element, nil, t(Element, 1, nil, nil), 2).
  30. insert_sbin_tree(Element, t(W, H, L, R), t(W, HNew, LNew, R), HParent) :-
  31.                           Element < W,
  32.                           insert_sbin_tree(Element, L, LNew, HL),
  33.                           mmax(H,HL,HNew),
  34.                           HParent is HNew + 1.
  35. insert_sbin_tree(Element, t(W, H, L, R), t(W, HNew, L, RNew), HParent) :-
  36.                           Element >= W,
  37.                           insert_sbin_tree(Element, R, RNew, HR),
  38.                           mmax(H,HR,HNew),
  39.                           HParent is HNew + 1.
  40.                          
  41. inorder_sbin2tree(nil, []).
  42. inorder_sbin2tree(t(W, _, L, R), List):- inorder_sbin2tree(L, LeftList),
  43.                                          inorder_sbin2tree(R, RightList),
  44.                                          append(LeftList,[W|RightList],List).
  45.                                          
  46.  
  47. halfList(List,FirstPart,SecondPart) :- length(List,Length),halfList(List,FirstPart,SecondPart,Length,0),!.
  48. halfList([],[],[],_,_).
  49. halfList([Head|Tail], [Head | FirstPart], SecondPart, Length, Count) :- Count < (Length-1)/2,
  50.                         halfList(Tail, FirstPart, SecondPart, Length,Count+1).
  51. halfList([Head|Tail], FirstPart, [Head| SecondPart], Length, Count) :- Count >= (Length-1)/2,
  52.                         halfList(Tail, FirstPart, SecondPart, Length,Count+1).
  53.                        
  54. list2sbin_tree(List,Tree) :- halfList(List,Left,Right), list2sbin_tree(Left, Right, Tree, _),!.
  55. list2sbin_tree([],[],nil,1).
  56. list2sbin_tree([],[Head|[]],t(Head,1,nil,nil),2).
  57.  
  58. list2sbin_tree(Left,[HeadR| TailR], t(HeadR,H,L,R), HParent) :-
  59.     halfList(Left, Left1, Left2),
  60.     halfList(TailR, Right1, Right2),
  61.     list2sbin_tree(Left1, Left2, L, HL),
  62.     list2sbin_tree(Right1, Right2, R, HR),
  63.     mmax(HL,HR,H),
  64.     HParent is H + 1.
  65.  
  66.  
  67.  
  68.  
  69.  
  70. gennumslist(Anzahl,List) :- randset(Anzahl,1000,List).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement