Структури даних, Детальна інформація
Структури даних
end;
procedure TreeStr.Insert (Value:integer);
var Tmp: PTree;
begin
InsElem (TTree, Value);
end;
При видаленні вершини х з бінарного дерева можливі три випадки:
х не має синів – тоді достатньо розташувати NIL у відповідне поле його батька (замість х);
х має одного сина – тоді його можна вирізати, поєднавши його батька напряму з цим сином;
х має двох синів – необхідно знайти наступний за х елемент y (який вже не має лівого сина), скопіювати його ключ та певні дані з вершини y до вершини x, а саму вершину y видалити вище описаним способом.
procedure DelElem (var Tree: PTree; Value: integer);
var tmp, Repl: PTree;
begin
if (Tree = NIL) then Exit;
if (Value < Tree^.Val) then DelElem (Tree^.Left, Value)
else if (Value > Tree^.Val) then DelElem (Tree^.Right, Value)
else if ((Tree^.Left <> NIL) and (Tree^.Right <> NIL)) then
begin
Repl := Fmin (Tree^.Right);
Tree^.Val := Repl^.Val;
DelElem (Tree^.Right, Repl^.Val);
end
else
begin
tmp := Tree;
if (Tree^.Left = NIL) then\x7220\x7065\x206C\x3D3A\x5420\x6572\x5E65\x522E\x6769\x7468\x0D3B††\x6669\x2820\x7254\x6565\x2E5E\x6952\x6867\x2074\x203D\x494E\x294C\x7420\x6568\x206E\x6572\x6C70\x3A20\x203D\x7254\x6565\x2E5E\x654C\x7466\x0D3B††\x6944\x7073\x736F\x2065\x7428\x706D\x3B29\x200D†\x5420\x6572\x2065\x3D3A\x5220\x7065\x3B6C\x200D\x6520\x646E\x0D3B\x6E65\x3B64\x0D0D\x7270\x636F\x6465\x7275\x2065\x7254\x6565\x7453\x2E72\x6544\x656C\x6574\x2820\x6156\x756C\x3A65\x6E69\x6574\x6567\x2972\x0D3B\x6562\x6967\x0D6E†\x6544\x456C\x656C\x206D\x5428\x7254\x6565\x202C\x6156\x756C\x2965\x0D3B\x6E65\x3B64\x0D0D
Дерева з довільним розгалудженням можна перетворити у двійкове дерево за принципом “ліва дитина – правий сусід”. Кожна вершина містить три вказівники:
вказівник p на батька;
вказівник left-child[x] на саму ліву дитину вершини х;
вказівник right-child[x] на найближчого сусіда вершини х;
procedure TreeStr.Insert (Value:integer);
var Tmp: PTree;
begin
InsElem (TTree, Value);
end;
При видаленні вершини х з бінарного дерева можливі три випадки:
х не має синів – тоді достатньо розташувати NIL у відповідне поле його батька (замість х);
х має одного сина – тоді його можна вирізати, поєднавши його батька напряму з цим сином;
х має двох синів – необхідно знайти наступний за х елемент y (який вже не має лівого сина), скопіювати його ключ та певні дані з вершини y до вершини x, а саму вершину y видалити вище описаним способом.
procedure DelElem (var Tree: PTree; Value: integer);
var tmp, Repl: PTree;
begin
if (Tree = NIL) then Exit;
if (Value < Tree^.Val) then DelElem (Tree^.Left, Value)
else if (Value > Tree^.Val) then DelElem (Tree^.Right, Value)
else if ((Tree^.Left <> NIL) and (Tree^.Right <> NIL)) then
begin
Repl := Fmin (Tree^.Right);
Tree^.Val := Repl^.Val;
DelElem (Tree^.Right, Repl^.Val);
end
else
begin
tmp := Tree;
if (Tree^.Left = NIL) then\x7220\x7065\x206C\x3D3A\x5420\x6572\x5E65\x522E\x6769\x7468\x0D3B††\x6669\x2820\x7254\x6565\x2E5E\x6952\x6867\x2074\x203D\x494E\x294C\x7420\x6568\x206E\x6572\x6C70\x3A20\x203D\x7254\x6565\x2E5E\x654C\x7466\x0D3B††\x6944\x7073\x736F\x2065\x7428\x706D\x3B29\x200D†\x5420\x6572\x2065\x3D3A\x5220\x7065\x3B6C\x200D\x6520\x646E\x0D3B\x6E65\x3B64\x0D0D\x7270\x636F\x6465\x7275\x2065\x7254\x6565\x7453\x2E72\x6544\x656C\x6574\x2820\x6156\x756C\x3A65\x6E69\x6574\x6567\x2972\x0D3B\x6562\x6967\x0D6E†\x6544\x456C\x656C\x206D\x5428\x7254\x6565\x202C\x6156\x756C\x2965\x0D3B\x6E65\x3B64\x0D0D
Дерева з довільним розгалудженням можна перетворити у двійкове дерево за принципом “ліва дитина – правий сусід”. Кожна вершина містить три вказівники:
вказівник p на батька;
вказівник left-child[x] на саму ліву дитину вершини х;
вказівник right-child[x] на найближчого сусіда вершини х;
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021