在數據可視化領域,經常須要將數據按照必定的規則分佈,使得數據展現直觀、清晰、一目瞭然。筆者在工程實踐時,遇到這樣一個問題:如何使得具備多個關係聯繫的點邊圖按照樹形佈局?html
在查閱了大量國內外資料的基礎上,筆者找到了Bill Mill的一篇英文論文:drawing presentable trees。git
在這裏先簡單地描述一下算法的大概思路:該算法採用深度優先的方式遍歷整個多叉樹。第一步:若是是葉子節點則其x座標等於其左兄弟的x座標加上間距distance,若是是非葉子節點則其x座標等於其左兄弟的x座標加上間距distance,同時記錄下偏移量(x座標與子節點的中點之差)。第二步:將全部的子節點按父節點的偏移量移動。第三步:計算多叉樹的輪廓,若是輪廓值小於0則說明左右子樹存在重疊,將右子樹偏移該輪廓值。github
此外,分享一下個人翻譯結果:http://www.cnblogs.com/zhongzihao/p/8976675.html。算法