我在dos下作过,但那是字符界面,最大是25行 * 80列。首先你需要确定根节点的位置 然后根据父节点的位置和深度确定左孩子和友孩子的位置。我建议你假设自己的2叉树是 满2叉树。这样只要节点的总数和深度不超过你设置的最大值,那么无论怎样的2叉树都 可以使用同一种方法计算节点的位置。应该完全可以满足演示的要求。然后是你还需要设定一个节点的显示的大小,比如一个圆,当然这个时候可以假设节点位 置就是圆心在屏幕或者客户区的坐标。然后建议你专门做一个方法是划线,连接父节点和 孩子节点。我那时是用制表符代替的。原形可以如下: DrawNodeLine(Node cFather,Node cSon)// Node是一个结构包含节点的位置 还需要一个方法是画节点的函数原形可以如下: DrawNode(Node cNode)然后再在你的动态构造2叉树的函数中,创建完新节点的地方加入如下的代码。我用伪代码 写,你自己换成C++代码: ... cNewNode;// 假设这是你动态生成的新的节点,注意位置已计算好 ... DrawNode(cNewNode); if (cNewNode has a father node) { Find the Father Node save to variable cFather // And we need draw a line to connect father node DrawNodeLine(cFather,cNewNode); }为了使得代码看着清楚一些,也可以把上面的代码在封装成一个方法: void InserNewNodeToDigram(Node cFather,Node cNewNode) { if (cNewNode == null) return; DrawNode(cNewNode); // cNewNode has a father node // and need draw a line to connect father node if (cFather != null) DrawNodeLine(cFather,cNewNode); }这样就差不多了,在你的动态创建2叉树的程序中,每完成创建一个新的节点就调用方法 InserNewNodeToDigram。有可能InserNewNodeToDigram还需要窗口的绘图对象作参 数,再细的就自己考虑吧。DrawNodeLine和DrawNode的实现细节请参考相关的绘图方法或者API。具体细节已和创 建2叉树无关了。
然后根据父节点的位置和深度确定左孩子和友孩子的位置。我建议你假设自己的2叉树是
满2叉树。这样只要节点的总数和深度不超过你设置的最大值,那么无论怎样的2叉树都
可以使用同一种方法计算节点的位置。应该完全可以满足演示的要求。然后是你还需要设定一个节点的显示的大小,比如一个圆,当然这个时候可以假设节点位
置就是圆心在屏幕或者客户区的坐标。然后建议你专门做一个方法是划线,连接父节点和
孩子节点。我那时是用制表符代替的。原形可以如下:
DrawNodeLine(Node cFather,Node cSon)// Node是一个结构包含节点的位置
还需要一个方法是画节点的函数原形可以如下:
DrawNode(Node cNode)然后再在你的动态构造2叉树的函数中,创建完新节点的地方加入如下的代码。我用伪代码
写,你自己换成C++代码:
...
cNewNode;// 假设这是你动态生成的新的节点,注意位置已计算好
...
DrawNode(cNewNode);
if (cNewNode has a father node)
{
Find the Father Node save to variable cFather
// And we need draw a line to connect father node
DrawNodeLine(cFather,cNewNode);
}为了使得代码看着清楚一些,也可以把上面的代码在封装成一个方法:
void InserNewNodeToDigram(Node cFather,Node cNewNode)
{
if (cNewNode == null)
return; DrawNode(cNewNode); // cNewNode has a father node
// and need draw a line to connect father node
if (cFather != null)
DrawNodeLine(cFather,cNewNode);
}这样就差不多了,在你的动态创建2叉树的程序中,每完成创建一个新的节点就调用方法
InserNewNodeToDigram。有可能InserNewNodeToDigram还需要窗口的绘图对象作参
数,再细的就自己考虑吧。DrawNodeLine和DrawNode的实现细节请参考相关的绘图方法或者API。具体细节已和创
建2叉树无关了。