Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  1. value = 0
  2. t = 0
  3. summ = 0
  4. class Node:
  5. def __init__(self, data=None, left=None, right=None): # описание труктуры узла дерева
  6. self.data = data # данные,которые хранит узел
  7. self.left = left # ссылка на левого сына
  8. self.right = right # ссылка на правого сына
  9.  
  10. def __str__(self): # переопределение метода str()д для корректного отображения узла
  11. return 'Node [' + str(self.data) + ' Левый: ' + str(self.left) + ' Правый: ' + str(self.right) + ']'
  12.  
  13.  
  14. class Tree:
  15.  
  16. def __init__(self):
  17. self.root = None # ссылка на корень дерева
  18.  
  19. def __str__(self): # переопределение метода str()д для корректного отображения дерева
  20. return str(self.root)
  21.  
  22. def getNodeString(self, node, nodepath):
  23. res = str(nodepath) + " " + str(node.data) + "\n"
  24. if (node.right != None):
  25. res = res + self.getNodeString(node.right, "\t" + str(nodepath) + "1")
  26. if (node.left != None):
  27. res = res + self.getNodeString(node.left, "\t" + str(nodepath) + "0")
  28. return str(res)
  29.  
  30. def createTree(self, node, treelist, nodePath, data): # создание сцепленного предтавления дерева
  31. node.data = int(data) # присвоение узлу данных
  32. for nodes in treelist: # перебор всех строк
  33. if nodes[0][:-1:] == str(nodePath): # если узел с данным путем найден
  34. if nodes[0][len(nodes[0]) - 1] == "0": # описание для левого узла
  35. node.left = Node()
  36. self.createTree(node.left, treelist, nodes[0], nodes[1])
  37. elif nodes[0][len(nodes[0]) - 1] == "1": # описание для правого узла
  38. node.right = Node()
  39. self.createTree(node.right, treelist, nodes[0], nodes[1])
  40.  
  41. def recurse(self, node): # выполнение задачи рекурсивным методом
  42. # инициализация переенной для хранения суммы значений узлов поддеревьев
  43. global t
  44. global value
  45. global summ
  46. if node != None: # если узел существует
  47. if node.left == None and node.right == None:
  48. t += 1
  49. summ += value + node.data
  50. value += node.data
  51. self.recurse(node.left)
  52. self.recurse(node.right)
  53. value -= node.data
  54. if node != None:
  55. if node == self.root:
  56. return summ / t
  57.  
  58.  
  59. def nonrecurse(self): # выполнение задачи нерекурсивным методом
  60. node = self.root # начальный обход начинается с корня
  61. stack = [] # инициализация стека для хранения узлов
  62. lastNodeVisited = None # иницилизация
  63. PrevNodeVisited = None
  64. value = 0
  65. summ = 0
  66. t = 0
  67. while stack != [] or node != None: # пока стек не опустел
  68. if node != None and PrevNodeVisited != node:
  69. stack.append(node)
  70. value += node.data
  71. node = node.left
  72. print('Вэлью: ', value)
  73. else:
  74. peekNode = stack[len(stack) - 1]
  75. if peekNode.right != None and lastNodeVisited != peekNode.right:
  76. node = peekNode.right
  77. else:
  78. if peekNode.left == None and peekNode.right == None:
  79. t += 1
  80. summ += value
  81. value -= peekNode.data
  82. PrevNodeVisited = stack[len(stack) - 2]
  83. lastNodeVisited = peekNode
  84. stack.pop()
  85. node = stack[len(stack) - 1]
  86.  
  87. else:
  88. value -= peekNode.data
  89. PrevNodeVisited = stack[len(stack) - 2]
  90. lastNodeVisited = peekNode
  91. stack.pop()
  92. if len(stack) >1:
  93. node = stack[len(stack) - 1]
  94. elif len(stack) !=0:
  95. node = stack[0]
  96. else:
  97. break
  98. return summ / t
  99.  
  100. def main():
  101. treelist1 = [] # инициализация списков для хранения узлов при считывании из txt
  102. file1 = open('D:\Tree2.txt', 'r') # открытие файлов
  103. for line in file1:
  104. treelist1.append(line.split()) # копирование строк в список
  105. tree1 = Tree()
  106. tree1.root = Node() # инициализация деревьев
  107. tree1.createTree(tree1.root, treelist1, 0, treelist1[0][1])
  108. print(tree1)
  109. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement