Пространственные узлы при построении бинарного дерева - PullRequest
1 голос
/ 13 апреля 2019

Я создал программу для построения бинарных деревьев, используя matplotlib, и она отлично работает для небольших деревьев.Но когда деревья становятся больше, на графике появляется много совпадений.Мне было интересно, как я могу улучшить свой способ разметки узлов по оси X, чтобы предотвратить их перекрытие.

Я пробовал разные значения для spacing, но это лучшее, что я придумалс.

    def getPoints(self, x=0, y=0, spacing=0, n=1):
        res = []
        if self.left:
            res = res + self.left.getPoints(x-1-spacing, y-1, spacing+(1/(n+1)), n+1)

        res.append((x, y, self.data))

        if self.right:
            res = res + self.right.getPoints(x+1+spacing, y-1, spacing+(1/n), n+1)
        return res

Код находится в моем классе Node и просто проходит через все точки в порядке обхода.Как изменить интервал, чтобы он не перекрывался? too much overlap

1 Ответ

0 голосов
/ 14 апреля 2019

Я исправил проблемы с большим количеством узлов. Я добавил self.layers в класс узла, чтобы отслеживать, в каком слое он находится, и добавил проверку, чтобы увидеть, на какой стороне дерева он находится, чтобы точка узла не уходила на неправильную сторону дерева.

    def getPoints(self, x=0, y=0):
        n = self.layers/2
        res = []
        if self.left:
            if x<=0:
                res = res + self.left.getPoints(x-n, y-1)
            else:
                res = res + self.left.getPoints(x-n/2, y - 1)

        res.append((x, y, self.data))

        if self.right:
            if x >= 0:
                res = res + self.right.getPoints(x+n, y-1)
            else:
                res = res + self.right.getPoints(x+n/2 , y - 1)

        return res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...