Структуры данных Деревья и Массивы для Стеков

Слайд 2

#include typedef int bool; const true =1; const false =0; struct

#include
typedef int bool; const true =1; const false =0;

struct Node { int d; Node *left; Node *right; };
Node * firstTr (int d);
Node * search_insertTr (Node * root, int d);
void printTr (Node *root, int l);
int main() {
int b[ ] = {10, 25, 20, 6, 21, 8, 1, 30};
Node *root = firstTr (b[0]);
for (int i=1; i<8; i++)
search_insertTr (root, b[i]);
printTr (root,0);
return 0; }
Node * firstTr (int d) {
Node *pv = new Node;
pv -> d = d;
pv -> left = 0;
pv -> right = 0;
return pv; }
void printTr (Node *p, int level) {
if (p) {
printTr(p->left,level+1); for(int i=0; i cout << " "; cout << p -> d << endl;
printTr (p -> right, level +1); } }
См. продолжение

Практическое занятие

Деревья (tree)

продолжение:
Node * search_insertTr (Node *root, int d)
{ Node *pv = root,
Node *prev;
bool found = false;
while (pv && !found)
{
prev = pv;
if (d == pv->d)
found = true;
else
if (d < pv->d)
pv = pv->left;
else
pv = pv->right;
}
if (found)
return pv;
Node *pnew = new Node;
pnew->d = d;
pnew->left = 0;
pnew->right = 0;
if (d < prev->d)
prev->left = pnew;
else
prev->right = pnew;
return pnew;
}

И+ПРГ

Слайд 3

Практическое занятие type Pt=^node; node=record key: integer; Left, Right: Pt end;

Практическое занятие

type Pt=^node;
node=record key: integer; Left, Right: Pt end;
var Dtree:

Pt;
Function SearchTr (var k: integer; var D,Rez: Pt): boolean;
var P: Pt; B: boolean;
begin
B := False; P := d;
if D<>nil then repeat if P^.key=k then B:=True
else if k then P:=P^.Lev
else P:=P^.Prav;
until B or (P=nil);
SearchTr := B; Rez := P;
end;
Procedure AddTr (K: Integer; var D: Pt);
var R, S: Pt;
begin
if not SearchTr (K, D, R) then
begin
New (S);
S^.key := K;
S^.Left := nil; S^.Right := nil;
if D = nil then D := S
else
if K < R^.key
then R^.Left := S
else R^.Right := S;
end
end;

Procedure DelTr (var D: Pt; var K: integer);
var Q: Pt;
Procedure DlTr (var R: Pt);
begin
if R^.Right = nil then
begin
Q^.key := R^.key;
Q := R;
R := R^.Left
end
else
DlTr (R^.Right)
end;
begin
if D = nil
then
WriteLn (' Узел с заданным ключом в дереве не найден')
else if K < D^.key then DelTr (D^.Right, K)
else
begin Q := D;
if Q^.Right = nil then
D := Q^.Left
else
if Q^.Left = nil
then
D := Q^.Right
else DlTr (Q^.Left)
end
end;

Деревья (tree)

И+ПРГ