Press "Enter" to skip to content

使用演示进行解释的Reingold Tilford算法

使用数字示例和Python代码绘制树节点的算法

Sergiu Vălenaș在Unsplash上的照片

介绍

1981年的Reingold-Tilford算法通过按照一定的规则排列树节点,从而创建出一个可视化的分层数据表示,以最大程度地提高可读性。换句话说,它是一种用于检索树中每个节点的(x, y)坐标的算法。

根据论文,一个好的树状图应该遵循一些美学规则:

1. 同一深度的节点应该位于一条直线上,而定义深度的直线应该是平行的

2. 左子节点应该位于父节点的左边,右子节点应该位于右边(仅适用于二叉树)

3. 父节点应该位于其子节点的中心位置

4. 树及其镜像图应该是互相反射的,无论子树在树中的位置如何,都应该以相同的方式绘制

确定节点的y坐标是直接的,而x坐标稍微复杂一些。本文将尝试通过在比其他论文和文章中更复杂的树上使用数字示例来解释算法,从而覆盖更多的场景。我还将介绍一些原始论文中未使用的额外术语,以更好地区分不同的术语。

算法的一个重要直觉是它将从左到右的方向绘制树。你可以将最左边的节点视为坐标为(0, 0),各个子树会相应地向右移动。

有趣的事实:scikit-learn Python库也使用这个算法来绘制决策树!

术语

在确定每个节点的最终坐标之前,有3个关键术语。原始论文提到了术语x和mod,但在我的解释中,我将使用一个额外的shift…

Leave a Reply

Your email address will not be published. Required fields are marked *