podobne do:
height(t) = if (t==NULL) then 0 else 1+max(height(t.left),height(t.right))
Masz:
perfect(t) = if (t==NULL) then 0 else {
let h=perfect(t.left)
if (h != -1 && h==perfect(t.right)) then 1+h else -1
}
Gdzie idealny (t) zwraca -1 gdy liście nie są na tej samej głębokości, lub każdy węzeł ma tylko jeden dziecko; w przeciwnym razie zwraca wysokość.
Edytuj: jest to dla "complete" = "Idealne drzewo binarne jest pełnym drzewem binarnym, w którym wszystkie liście mają tę samą głębokość lub ten sam poziom: 1 (Jest to niejednoznacznie zwane również pełnym drzewem binarnym)." (Wikipedia).
Oto rekursywna kontrola dla: "Kompletne drzewo binarne jest drzewem binarnym, w którym każdy poziom, z wyjątkiem być może ostatnim, jest całkowicie wypełniony, a wszystkie węzły są jak najdalej.". Zwraca (-1, fałsz), jeśli drzewo nie jest kompletne, w przeciwnym razie (wysokość, pełne), jeśli jest, z pełnym == prawdą, to jest idealne.
complete(t) = if (t==NULL) then (0,true) else {
let (hl,fl)=complete(t.left)
let (hr,fr)=complete(t.right)
if (fl && hl==hr) then (1+h,fr)
else if (fr && hl==hr+1) then (1+h,false)
else (-1,false)
}
zajrzyj do http://stackoverflow.com/questions/18159884/whether-a-given-binary-tree-is-complete-or-not za jeden z najprostszych podejścia. – Trying