Скачать презентацию Динамические структуры данных Деревья Дерево — Скачать презентацию Динамические структуры данных Деревья Дерево —

Динамические структуры данных.pptx

  • Количество слайдов: 12

Динамические структуры данных Деревья Динамические структуры данных Деревья

 Дерево - это частный случай графа, наиболее широко применяемый в программировании. А A, Дерево - это частный случай графа, наиболее широко применяемый в программировании. А A, B, C , D E, F, G - вершины 1 уровень С В B C D – потомки вершины А D 2 уровень E F A- корень, предок вершин B C D E F G терминальные вершины (листы) B C D - братья, нетерм-ные вершины (внутренние) G Структура не является деревом, указатели, нарушающие соответствие структуры определению дерева, обозначены желтым

 Дерево называют упорядоченным, если для дерева важен порядок ребер, исходящих из вершины. Если Дерево называют упорядоченным, если для дерева важен порядок ребер, исходящих из вершины. Если же принимается во внимание лишь ориентация вершин, то дерево ориентированное 1 1 2 3 4 2 4 3 Дерево в котором вершин имеют не более двух потомком, называется двоичным (бинарным) деревом Левое Правое

 Любой лес n-арных деревьев можно представать в виде двоичного дерева 1 2 5 Любой лес n-арных деревьев можно представать в виде двоичного дерева 1 2 5 3 6 15 11 7 8 9 16 13 12 4 14 17 1 11 2 5 15 12 3 13 4 14 6 16 17 7 8 9

 Type t: integer; tree_ptr=^tree; tree= record value: t; left, right: tree_ptr; end; Type t: integer; tree_ptr=^tree; tree= record value: t; left, right: tree_ptr; end;

Поиск по дереву Function find(root: tree; key: integer; var p, paent: tree): Boolean; begin Поиск по дереву Function find(root: tree; key: integer; var p, paent: tree): Boolean; begin p: =root; while p<>nil do begin if key=p^. inf then begin Find =true exit; end; Parent: =p If key

Вставка узла procedure addnode_r(r, prev: ptr; newkey: integer; newdata: info); begini if r = Вставка узла procedure addnode_r(r, prev: ptr; newkey: integer; newdata: info); begini if r = nil then begin new(r); r^. left : = nil; r^. right : = nil; r^. key : = newkey; r^. data : = newdata; if tree = nil then tree : = r; (* Первый узел *) else begin if newkey

Удаление узла Удаление узла

 procedure del ( var root : tree ; key : integer ); var procedure del ( var root : tree ; key : integer ); var p : tree ; {удаляемый узел} parent : tree ; {предок удаляемого узла} y : tree ; {узел, заменяющий удаляемый} function spusk(p: tree): tree; var y : tree ; {узел, заменяющий удаляемый} pred: tree; { предок узла “y”} begin y: =p^. right; if y^. left=nil then y^. left: =p^. left {1} else {2} begin repeat pred: =y; y: =y^. left; until y^. left=nil; y^. left: =p^. left; {3} pred^. left: =y^. right; {4} y^. right: =p^. right; {5} end; spusk: =y; end; begin if not find(root, key, p, parent) then {6} begin writeln(‘ такого элемента нет ’); exit; end; if p^. left=nil then y: =p^. right {7} else if p^. right=nil then y: =p^. left {8} else y: =spusk(p); {9} if p=root then root: =y {10} else {11} if key

Обход дерева прямой обход(сверху вниз): (1, 2, 3, 4 , 5) Попасть в корень Обход дерева прямой обход(сверху вниз): (1, 2, 3, 4 , 5) Попасть в корень Обойти левое поддерево обойти правое поддерево Procedure pass_dir ( t: tree_ptr); Begin if t<>nill then begin write(t^. c); pass_dir(t^. left); pass_dir(t^. right); end. 1 2 3 4 5

Обход дерева обратный обход (снизу вверх) (3, 2, 4, 1, 5) Обойти левое поддерево Обход дерева обратный обход (снизу вверх) (3, 2, 4, 1, 5) Обойти левое поддерево Попасть в корень Обойти правое поддерево Procedure pass_back ( t: tree_ptr); Begin if t<>nill then begin pass_back(t^. left); write(t^. c); pass_back(t^. right); end. 1 2 3 4 5

Обход дерева концевой обход( слева направо) (3, 4, 2, 5, 1) Обойти левое поддерево Обход дерева концевой обход( слева направо) (3, 4, 2, 5, 1) Обойти левое поддерево Обойти правое поддерево Попасть в корень Procedure pass_end ( t: tree_ptr); Begin if t<>nill then begin pass_end(t^. left); pass_end(t^. right); write(t^. c); end; end. 1 2 3 4 5