Разработайте программу работы с бинарным деревом. Программа должна содержать следующие процедуры, вызываемые из меню:- построение пустого дерева;- добавление нового элемента;- удаление указанного элемента;- просмотр дерева в следующем порядке: узел, левая ветвь, правая ветвь- Pascal(Паскаль)

program BinaryTree;
uses crt;

type
  PNode = ^TNode;
  TNode = record
    value: Integer;
    left, right: PNode;
  end;

var
  treeRoot: PNode;

procedure BuildEmptyTree(var root: PNode);
begin
  root := nil;
end;

procedure AddNode(var root: PNode; newValue: Integer);
begin
  if root = nil then
  begin
    New(root);
    root^.value := newValue;
    root^.left := nil;
    root^.right := nil;
  end
  else if newValue < root^.value then
    AddNode(root^.left, newValue)
  else if newValue > root^.value then
    AddNode(root^.right, newValue);
end;

function FindMinNode(node: PNode): PNode;
var
Result:PNode;
begin
  if node^.left <> nil then
    Result := FindMinNode(node^.left)
  else
    Result := node;
    FindMinNode:=Result;
end;

function RemoveNode(var root: PNode; valueToDelete: Integer): Boolean;
var
  tempNode: PNode;
  Result:boolean;
begin
  if root = nil then
    Result := False
  else if valueToDelete < root^.value then
    Result := RemoveNode(root^.left, valueToDelete)
  else if valueToDelete > root^.value then
    Result := RemoveNode(root^.right, valueToDelete)
  else
  begin
    if (root^.left = nil) and (root^.right = nil) then
    begin
      Dispose(root);
      root := nil;
    end
    else if root^.left = nil then
    begin
      tempNode := root;
      root := root^.right;
      Dispose(tempNode);
    end
    else if root^.right = nil then
    begin
      tempNode := root;
      root := root^.left;
      Dispose(tempNode);
    end
    else
    begin
      tempNode := FindMinNode(root^.right);
      root^.value := tempNode^.value;
      Result := RemoveNode(root^.right, tempNode^.value);
    end;
    Result := True;
  end;
  RemoveNode:=Result;
end;

procedure DisplayTree(root: PNode);
begin
  if root <> nil then
  begin
    Write(root^.value, ' ');
    DisplayTree(root^.left);
    DisplayTree(root^.right);
  end;
end;

procedure Menu;
var
  choice: Integer;
  value: Integer;
begin
  ClrScr;
  writeln('1. Построить пустое дерево');
  writeln('2. Добавить элемент');
  writeln('3. Удалить элемент');
  writeln('4. Просмотреть дерево');
  writeln('0. Выход');
  write('Выберите действие: ');
  readln(choice);
  case choice of
    1:
    begin
      BuildEmptyTree(treeRoot);
      writeln('Пустое дерево создано.');
      readln;
      Menu;
    end;
    2:
    begin
      write('Введите значение: ');
      readln(value);
      AddNode(treeRoot, value);
      writeln('Элемент добавлен.');
      readln;
      Menu;
    end;
    3:
    begin
      write('Введите значение: ');
      readln(value);
      if RemoveNode(treeRoot, value) then
        writeln('Элемент удален.')
      else
        writeln('Элемент не найден.');
      readln;
      Menu;
    end;
    4:
    begin
      writeln('Дерево:');
      DisplayTree(treeRoot);
      writeln;
      readln;
      Menu;
    end;
    0:
    begin
      writeln('Выход из программы');
    end;
  else
    begin
      writeln('Некорректный выбор. Повторите попытку.');
      readln;
      Menu;
    end;
  end;
end;

begin
  Menu;
end.

Leave a Comment

22 − 15 =