假设你的树节点类型包含了指向它的两个子节点的引用以及父节点的引用(本人看到的代码中大部分都是这样实现的)。使用层次遍历的次序遍历整棵树的所有节点,统计每一层中包含节点的数量,然后根据你想要显示的区域的宽度,计算当前层两两节点之间的间距。然后依次画出当前层的那个节点,如果该节点有父节点,则画出之间的连线。为了方便,你可以在每个节点中保存该节点的中心坐标。另外一种思路,你也可以从树的根节点开始画,先统计树的最大深度,然后计算每一层之间的间距,将根节点放在第一层的中点。然后根据根节点的位置推算两个节点的相对位置。之后分别让左右子树作为根节点,使用相同思路绘制。
不过这样画出来的树并不是很美观,但是作为测试或者现实树的结构来说已经很直观了。
谢谢。欢迎交流任何想法!