Содержание
- 2. Дерево – структура данных, представляющая собой древовидную структуру в виде набора связанных узлов. Является связным графом,
- 3. Синтаксическое дерево – это дерево в котором внутренние вершины это операторы языка программирования, а листья операнды
- 4. Генеалогическое древо
- 5. Логические файловые системы Деревья используются в файловых системах ОС.
- 6. Префиксное дерево – это дерево содержащее все суффиксы некоторой строки и позволяют осуществить поиск подстроки в
- 7. Деревья решений (decition trees) используются в классификации
- 8. Определения Корневой узел, корень дерева — самый верхний узел дерева. Корень поддерева — одна из вершин,
- 9. Определения Поддерево — часть древообразной структуры данных, которая может быть представлена в виде отдельного дерева. Любой
- 10. Определения Лист, листовой или терминальный узел — узел, не имеющий дочерних элементов; Внутренний узел — любой
- 11. Определения Лист, листовой или терминальный узел — узел, не имеющий дочерних элементов; Внутренний узел — любой
- 12. Определения Глубина дерева – длина самого длинного пути от корня до листа. Каждое дерево обладает следующими
- 13. Определения Обход дерева – это упорядоченная последовательность вершин дерева, в которой каждая вершина встречается только один
- 14. Определения Три наиболее часто используемых способа обхода дерева: прямой; симметричный; обратный.
- 15. Бинарное дерево – это дерево, в котором каждый узел имеет не более двух дочерних элементов, которые
- 16. Бинарное дерево поиска – это бинарное дерево, в котором справедливо следующее: Оба поддерева — левое и
- 17. Реализация бинарного дерева поиска
- 18. Реализация бинарного дерева поиска
- 19. Реализация бинарного дерева поиска Двоичное дерево состоит из узлов (вершин) — записей вида (data, left, right),
- 20. Реализация бинарного дерева поиска Данные (data) обладают ключом (key), на котором определена операция сравнения «меньше». В
- 21. Класс узла дерева – TreeNode class TreeNode where T: IComparable { T value; TreeNode left; TreeNode
- 22. Класс дерева – MyTree Добавление узла в дерево Поиск значения Удаление узла из дерева Вычисление: глубины
- 23. Класс дерева – MyTree class MyTree where T: IComparable { TreeNode root; public void Add(T value){…}
- 24. Добавление узла в дерево void Add(T value) public void Add(T value) { TreeNode node = new
- 25. Добавление узла в дерево void Add(T value) public void Add(T value) { TreeNode node = new
- 26. Добавление узла в дерево void Add(T value) public void Add(T value) { TreeNode node = new
- 27. Добавление узла в дерево void Add(T value) public void Add(T value) { TreeNode node = new
- 28. public void Add(T value) { TreeNode node = new TreeNode (value); if (root == null) root
- 29. public void Add(T value) { TreeNode node = new TreeNode (value); if (root == null) root
- 30. Поиск значения public TreeNode Find(T value)
- 31. Поиск значения public TreeNode Find(T value) public TreeNode Find(T value) { if (root == null) return
- 32. Поиск значения public TreeNode Find(T value) public TreeNode Find(T value) { return Find(value, root); } private
- 33. Поиск значения public TreeNode Find(T value) public TreeNode Find(T value) { return Find(value, root); } private
- 34. Симметричный обход string LNR() 10 20 40 50 60 70
- 35. Симметричный обход string LNR() public string LNR() { return LNR(root); } private string LNR(TreeNode subroot) {
- 36. Прямой обход string NLR() 40 20 10 60 50 70
- 37. Прямой обход string NLR() public string NLR() { return NLR(root); } private string NLR(TreeNode subroot) {
- 38. Обратный обход string ???() ? ? ? ? ? ?
- 39. Обратный обход string LRN() 10 20 50 70 60 40
- 40. Обратный обход string LRN() public string LRN() { return LRN(root); } private string LRN(TreeNode subroot) {
- 41. Вычисление глубины дерева int GetDeep() 1 1 0
- 42. Вычисление глубины дерева int GetDeep() 2 1 0 1 1 1 1
- 43. Вычисление глубины дерева int GetDeep() 2 1 0 1 1 2 1
- 44. Вычисление глубины дерева int GetDeep() 2 1 0 3 1 2 1
- 45. 2 1 0 3 1 2 1 Вычисление глубины дерева int GetDeep() public int GetDeep() {
- 46. Вычисление количества листьев int GetLeafs() public int GetLeafs() { return GetLeafs(root); } private int GetLeafs(TreeNode subroot)
- 47. Вычисление количества узлов int GetNodes() public int GetNodes() { return GetNodes(root); } private int GetNodes(TreeNode subroot)
- 48. Если это лист Если у этого узла одно поддерево Если у этого узла два поддерева Удаление
- 49. Удаление узла дерева Если это лист public void Remove(T value) { return Remove(value, root); } private
- 50. Удаление узла Если одно поддерево private void Remove(T value, TreeNode subroot) { if (subroot == null)
- 51. Удаление узла Если два поддерева private void Remove(T value, TreeNode subroot) { if (subroot == null)
- 52. Удаление узла public void Remove(T value) { return Remove(value, root); } private void Remove(T value, TreeNode
- 53. Удаление узла Если корень public void Remove(T value) { return Remove(value, root); } private void Remove(T
- 54. public void Remove(T value) { if (root != null && root.Value == value) { if (root.Left
- 55. public void Remove(T value) { if (root != null && root.Value == value) { if (root.Left
- 56. public void Remove(T value) { if (root != null && root.Value == value) { if (root.Left
- 57. public void Remove(T value) { if (root != null && root.Value == value) { if (root.Left
- 58. public class TreeNode > { T value; TreeNode left; TreeNode right; TreeNode parent; public TreeNode(T value)
- 59. public class MyTree > { TreeNode root; public void Delete(T value){ … } private void Delete(???)
- 60. public void Delete(T value){ if (root == null) return; if (root.getValue() == value) { if (root.getLeft()
- 61. public void Delete(T value){ if (root == null) return; if (root.getValue() == value) { if (root.getLeft()
- 62. private void Delete(T value, TreeNode subroot, boolean isLeft) { if (subroot == null) return; if (subroot.getValue()
- 63. АВЛ-дерево АВЛ-дерево — сбалансированное по высоте двоичное дерево поиска: для каждой его вершины высота её двух
- 64. Максимальная высота АВЛ-дерева при заданном числе узлов
- 65. Дерево Фибоначчи Дерево Фибоначчи — АВЛ-дерево с наименьшим числом вершин при заданной высоте (глубине). Если для
- 66. Дерево Фибоначчи
- 67. Балансировка Относительно АВЛ-дерева балансировкой вершины называется операция, которая в случае разницы высот левого и правого поддеревьев
- 68. Правый поворот (малое правое вращение) Данное вращение используется тогда, когда: (высота b-поддерева — высота R) =
- 69. Правый поворот (малое правое вращение) private TreeNode RightRotate(TreeNode subroot) { TreeNode b = subroot.Left; subroot.Left =
- 70. Левый поворот (малое левое вращение) Данное вращение используется тогда, когда: (высота b-поддерева — высота L) =
- 71. Левый поворот (малое левое вращение) private TreeNode LeftRotate(TreeNode subroot) { TreeNode b = subroot.Right; subroot.Right =
- 72. Большой левый поворот (большое левое вращение) Данное вращение используется тогда, когда (высота b-поддерева — высота L)
- 73. Большой левый поворот (большое левое вращение)
- 74. Большой левый поворот (большое левое вращение) subroot.Right = RightRotate(subroot.Right); return LeftRotate(subroot);
- 75. Большой правый поворот (большое правое вращение) Данное вращение используется тогда, когда (высота b-поддерева — высота R)
- 76. Большой правый поворот (большое правое вращение) subroot.Left = LeftRotate(subroot.Left); return RightRotate(subroot);
- 77. Балансировка узла TreeNode Balance(TreeNode subroot) // балансировка узла p { if( (GetHeight(subroot.getRight()) - GetHeight(subroot.getLeft()))==2 ) {
- 78. Удаление узла из АВЛ дерева
- 79. Удаление узла из АВЛ дерева // поиск узла с минимальным ключом в поддереве TreeNode GetMin(TreeNode subroot)
- 80. Удаление узла из АВЛ дерева TreeNode Remove(TreeNode subroot, T value) // удаление значения из поддерева {
- 83. Скачать презентацию