Визуализация бинарного дерева python

Binarytree: Python Library for Studying Binary Trees

Are you studying binary trees for your next exam, assignment or technical interview?

Binarytree is a Python library which lets you generate, visualize, inspect and manipulate binary trees. Skip the tedious work of setting up test data, and dive straight into practising your algorithms. Heaps and binary search trees are also supported. Self-balancing search trees like red-black or AVL will be added in the future.

Check out the documentation for more details.

Binarytree can be used with Graphviz and Jupyter Notebooks as well:

Requirements

Installation

pip install binarytree --upgrade
conda install binarytree -c conda-forge

Getting Started

Binarytree uses the following class to represent a node:

Generate and pretty-print various types of binary trees:

                         Generate trees with letter values instead of numbers:
  Use level-order (breadth-first) indexes to manipulate nodes:

Traverse trees using different algorithms:

Binarytree supports another representation which is more compact but without the indexing properties (this method is often used in Leetcode):

              Check out the documentation for more details.

Источник

Предисловие

Поставьте в первую очередь
Пс. На самом деле, на CSDN есть много бинарных деревьев, но я думаю, что моя внешность симпатичная (смешно

  1. Построить бинарное дерево class TreeNode(object)
  2. Установите высоту и радиус слоя и слоя HEIGHT = 100, r = 25
  3. Рассчитайте угол отклонения каждого слоя ветвей заранее DEGREE

Описание функции

  • Нарисуйте круг для текущей позиции
    def center(begin_x, begin_y)
  • Напишите значение текущего узла в текущую позицию
    def value(begin_x, begin_y, val)
  • Нарисуйте левое дерево дерева для текущего узла
    def left(begin_x, begin_y, degree)
  • Нарисуйте правый суб -три
    def right(begin_x, begin_y, degree)

Объяснение кода

  • Поскольку щетка расположена в (0,0) положении, когда она создается, чтобы сделать двоичное дерево лучше, начальная позиция перемещалась до определенной высоты
  • Проблема направления щетки: ориентация начального положения горизонтальна вправо, влево вращается против часовой стрелки, правая вращается по часовой стрелке
# encoding: utf-8 """ This module provides access to binary tree visualization """ import turtle import math class TreeNode(object): def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right '' 'Связанные данные' '' ' DEGREE = [] DEEP = 0 HEIGHT = 100 '' 'Настройки холста' '' ' Tree = turtle.Turtle() W = turtle.Screen() W.title("Бинарная визуализация дерева") Tree.hideturtle() Tree.speed(20) Tree.pensize(2) # Круглый радиус r = 25 # def value(begin_x, begin_y, val): val = str(val) Tree.penup() Tree.goto(begin_x, begin_y - 10) Tree.pendown() if len(val) > 2: val = val[0] + val[1] + "…" Tree.write(val, align="center", font=("Courier", 14, "bold")) # Операция восстановления Tree.penup() Tree.goto(begin_x, begin_y) Tree.pendown() # def center(begin_x, begin_y): Tree.penup() Tree.goto(begin_x, begin_y - r) Tree.pendown() Tree.circle(r) Tree.penup() Tree.goto(begin_x, begin_y) Tree.pendown() # # # def left(begin_x, begin_y, degree): length = HEIGHT / math.cos((degree - 90) / 180 * math.pi) Tree.right(degree) Tree.penup() Tree.forward(r) Tree.pendown() Tree.forward(length - 2 * r) Tree.penup() Tree.forward(r) Tree.pendown() Tree.left(degree) temp_x, temp_y = Tree.pos() center(temp_x, temp_y) Tree.penup() Tree.goto(begin_x, begin_y) Tree.down() _x = begin_x - math.sin((degree - 90) / 180 * math.pi) * length _y = begin_y - math.cos((degree - 90) / 180 * math.pi) * length return _x, _y # def right(begin_x, begin_y, degree): length = HEIGHT / math.cos((-degree + 90) / 180 * math.pi) Tree.right(degree) Tree.penup() Tree.forward(r) Tree.pendown() Tree.forward(length - 2 * r) Tree.penup() Tree.forward(r) Tree.pendown() Tree.left(degree) temp_x, temp_y = Tree.pos() center(temp_x, temp_y) Tree.penup() Tree.goto(begin_x, begin_y) Tree.down() _x = math.sin((-degree + 90) / 180 * math.pi) * length + begin_x _y = -math.cos((-degree + 90) / 180 * math.pi) * length + begin_y return _x, _y def func(x_, y_, root, deep_): Tree.penup() Tree.goto(x_, y_) Tree.pendown() value(x_, y_, root.val) if root.left is not None: _x, _y = left(x_, y_, 90 + DEGREE[deep_]) func(_x, _y, root.left, deep_ + 1) Tree.penup() Tree.goto(x_, y_) Tree.pendown() if root.right is not None: _x, _y = right(x_, y_, 90 - DEGREE[deep_]) func(_x, _y, root.right, deep_ + 1) def draw(root, deep): DEEP = deep te = 15 last = 0 DEGREE.append(15) for i in range(DEEP - 2): a = math.atan((HEIGHT * math.tan(te / 180 * math.pi) + r + 6 + last) / HEIGHT) / math.pi * 180 last = (HEIGHT * math.tan(te / 180 * math.pi) + r + 6 + last) / 2 te = a DEGREE.append(a) DEGREE.reverse() x = 0 y = 300 Tree.penup() Tree.goto(x, y) Tree.pendown() center(x, y) func(x, y, root, 0) W.exitonclick() # ''' if __name__ == '__main__': # binary_tree = TreeNode(1) temp = TreeNode(2111) binary_tree.left = temp temp = TreeNode(3) binary_tree.right = temp temp = TreeNode(4) binary_tree.left.left = temp temp = TreeNode(5) binary_tree.left.right = temp temp = TreeNode(6) binary_tree.right.left = temp temp = TreeNode(7) binary_tree.right.right = temp temp = TreeNode(8) binary_tree.left.left.left = temp temp = TreeNode(9) binary_tree.left.left.right = temp temp = TreeNode(10) binary_tree.left.right.left = temp temp = TreeNode(11) binary_tree.left.right.right = temp temp = TreeNode(12) binary_tree.right.left.left = temp temp = TreeNode(13) binary_tree.right.left.right = temp # Функции вызова draw(binary_tree, 4) 

Источник

Рисование деревьев на Python

написал код для бинарного дерева, искал методы как его визуализировать в окнах, причем как графы, с узлами и прочим, достойного ответа не нашел, обращаюсь к гуру сего форума за помощью, а именно за советом, где лучше на Python делать деревья, причем графообразные.

2 ответа 2

Для визуализации любых графов (не больших объемов) можно использовать Graphviz. Для python есть API graphviz, через которое можно задать и нарисовать граф. Рисовать бинарные деревья через этот инструмент так же возможно, по умолчанию они получаются не очень красивые, но есть возможность написать скрипт к graphviz, который сделает отображение бинарных деревьев правильным.

Это хорошо, но я не нашел достойного гайда , или документации по сему творению, с официального источника всё печально, я не могу вывести саму картинку графа, а мне она как раз таки и нужна

@antipups Тогда вам следует задать вопрос о том, как вывести картинку графа в окне, используя graphviz и python

Хорошо. картинку вывести я смог, а сам алгоритм ужасен. я не могу придумать нормальный алгоритм для рисовки этих деревьев, а мне ещё к тому же нужно задачу на удаление элемента с одним дочерним элементом.

@antipups Это тоже тема для нового вопроса, в котором вы можете описать ваш код, и задать вопрос про интересующие вас проблемы этого кода

Да, с помощью Graphviz можно построить деревья и вывести картинку этого куда надо, для этого надо скачать сам Graphviz с официального сайта, установить его, в python скрипте прописать import os os.environ[«PATH»] += os.pathsep + ‘C:/Program Files (x86)/Graphviz2.38/bin/’ вместо моего пути указать ваш путь, и написать свой собственный алгоритм построения этих деревьев.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.8.15.43578

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Читайте также:  Ванная комната камни дерево
Оцените статью