Advertisement
alex0sunny

print_tree

Oct 13th, 2021
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.53 KB | None | 0 0
  1. FIELD_WIDTH = 3
  2.  
  3.  
  4. class Node:
  5.     def __init__(self, value, left=None, right=None):
  6.         self.size = None
  7.         self.value = value
  8.         self.right = right
  9.         self.left = left
  10.  
  11.  
  12. def get_height(node):
  13.     return 0 if not node else 1 + max(get_height(node.left), get_height(node.right))
  14.  
  15.  
  16. def update_output(node, row, left, right, output):
  17.     if not node:
  18.         return
  19.     mid = (left + right) // 2
  20.     output[row][mid] = str(node.value).center(FIELD_WIDTH)
  21.     update_output(node.left, row + 1, left, mid - 1, output)
  22.     update_output(node.right, row + 1, mid + 1, right, output)
  23.  
  24.  
  25. def get_lines(root):
  26.     height = get_height(root)
  27.     width = 2 ** height - 1
  28.     output = [[' ' * FIELD_WIDTH] * width for i in range(height)]
  29.     update_output(node=root, row=0, left=0, right=width - 1, output=output)
  30.     return output
  31.  
  32.  
  33. def get_size(node):
  34.     if not node:
  35.         return 0
  36.     node.size = 1 + get_size(node.left) + get_size(node.right)
  37.     return node.size
  38.  
  39.  
  40. def print_tree(root):
  41.     if not root:
  42.         print(None)
  43.     [print(''.join(line)) for line in get_lines(root)]
  44.  
  45.  
  46. node1 = Node(1)
  47. node3 = Node(3)
  48. # 5 7 9 11 13 15
  49. node5 = Node(5)
  50. node7 = Node(7)
  51. node9 = Node(9)
  52. node11 = Node(11)
  53. node13 = Node(13)
  54. node15 = Node(15)
  55. node2 = Node(2, node1, node3)
  56. # 6 10 14
  57. node6 = Node(6, node5, node7)
  58. node10 = Node(10, node9, node11)
  59. node14 = Node(14, node13, node15)
  60. # 4 12
  61. node4 = Node(4, node2, node6)
  62. node12 = Node(12, node10, node14)
  63. root = Node(8, node4, node12)
  64.  
  65. print_tree(root)
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement