boris-vlasenko

Бинарное дерево с отрисовкой

Apr 2nd, 2019
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.08 KB | None | 0 0
  1. from tkinter import *
  2. from random import randrange as rnd
  3.  
  4. win = Tk()
  5. win.geometry('800x800')
  6. canv = Canvas(bg='white')
  7. canv.pack(fill=BOTH,expand=1)
  8.  
  9. m = 30
  10. x0 = 400
  11. y0 = 50
  12.  
  13. class Node():
  14.     def __init__(self,value):
  15.         self.value = value
  16.         self.left = None
  17.         self.right = None
  18.    
  19.     def __str__(self):
  20.         return str(self.value)
  21.  
  22.  
  23. def add_node(node,value):
  24.     if value > node.value:
  25.         if node.right:
  26.             add_node(node.right,value)
  27.         else:
  28.             node.right = Node(value)
  29.     else:
  30.         if node.left:
  31.             add_node(node.left,value)
  32.         else:
  33.             node.left = Node(value)
  34.        
  35. def paint_node(node,x,y,w):
  36.     r = m/2
  37.     canv.create_oval(x-r,y-r,x+r,y+r)
  38.     if node.value:
  39.         canv.create_text(x,y,text = node.value, font = 'Tahoma 14')
  40.     if node.left:
  41.         canv.create_line(x,y,x-w/2,y+m)
  42.         paint_node(node.left,x-w/2,y+m,w/2)
  43.     if node.right:
  44.         canv.create_line(x,y,x+w/2,y+m)
  45.         paint_node(node.right,x+w/2,y+m,w/2)
  46.    
  47.  
  48. root = Node(10)
  49. values = [x for x in range(100)]
  50.  
  51. for i in range(10):
  52.     i = rnd(len(values))
  53.     add_node(root,values.pop(i))
  54.  
  55.  
  56. paint_node(root,x0,y0,600)
  57.  
  58.  
  59. mainloop()
Advertisement
Add Comment
Please, Sign In to add comment