根据wikipedia, n - 2 节点的二叉树与简单 n-vertex 多边形三角剖分之间存在双射(1:1对应关系)。我想知道,如何相互转换*?
换句话说,如何将三角形集转换为二叉树以及如何将二叉树转换为三角形集?三角形是顶点的三角形(v0,v1,v2),并链接相邻三角形(n0,n1,n2)。
* 来自程序员的视图,算法,代码示例等。
答案 0 :(得分:2)
这是一个递归的双射。
基本情况是退化的2顶点多边形对应于空树。
感应地,树至少有一个内部节点。假设多边形的顶点具有按顺时针顺序从1到n的预先存在的标签。检查包含边缘12的唯一三角形T.
1-----2
/| /|\
/ | T / | \
6 | / | 3
\ | / | /
\|/ |/
5-----4
如果我们删除T,我们得到两个三角形多边形。在这种情况下,我们得到2345和156.递归地生成多边形,包括1,得到根的左子树。递归地生成多边形,包括2,以获得根的正确子树。
查看此双射的一种特别灵活的方法是我们通过采用三角剖分的平面双图,删除入射到无限面的边,并将与12相邻的面指定为根来推导树。