我正在尝试对我的霍夫曼代码树进行图形化表示。我有树的根节点,并编写了一个printTree()函数以递归调用自身并在控制台中打印所有子树。
我做了一个绘制树根和它的孩子的小程序,但是我不知道如何绘制其余部分,因为我不能用参数递归调用画图。有谁知道如何递归绘画,同时将旧的图纸保留在那里,以便我可以绘制其余的树。
System.out.println("Paint");
g.setColor(Color.black);
g.drawRect(0, 0, getSize().width -1,getSize().height -1);
g.setColor(Color.red);
g.drawString(text, 15, 25);
g.setColor(Color.white);
//left line
g.drawLine(ovalCenterx,ovalCentery,leftOvalx+30,leftOvaly);
//right line
g.drawLine(ovalCenterx,ovalCentery,rightOvalx+19,rightOvaly);
g.setColor(Color.green);
//draw left circle
g.fillOval(leftOvalx,leftOvaly, ovalSize, ovalSize);
//draw right circle
g.fillOval(rightOvalx,rightOvaly, ovalSize, ovalSize);
//draw the root
g.fillOval(ovalX, ovalY, ovalSize, ovalSize);
g.setColor(Color.white);
g.setColor(Color.black);
//draw root label
g.drawChars(label,0,label.length,ovalX+ovalP,ovalY+ovalP);
if(labelleft != null)
g.drawChars(labelleft,0,labelleft.length,leftOvalx+ovalP,leftOvaly+ovalP);
if(labelright != null)
g.drawChars(labelright,0,labelright.length,rightOvalx+ovalP,rightOvaly+ovalP);
if(left){
setRootCoord(leftOvalx,leftOvaly);
}
if(right){
setRootCoord(rightOvalx,leftOvaly);
这是我的绘画功能。我只想对所有孩子调用此函数,直到结束为止。
这是控制台版本。
public void printTree(int counter){
counter++;
// System.out.println(this.right + " is this.right");
// System.out.println(this.left.data.prob);
// System.out.println(this.right.data.prob);
if(this.left.data.prob == -1 && this.right.data.prob == -1){
if(counter > 1)
return;
this.left.printTree(counter);
this.right.printTree(counter);
}
if(this.left.data.prob == -1.0 && this.right.data.prob != -1.0){
System.out.println(this + "my left is -1");
this.left.printTree(counter);
}
if(this.right.data.prob == -1.0 && this.left.data.prob != -1.0){
System.out.println(this + "my right is -1");
this.right.printTree(counter);
}
if(this.right.data.prob != -1.0 && this.left.data.prob != -1.0){
System.out.println(this);
}
}
最佳答案
如果您的油漆是油漆,则创建自己的paint2(Tree t, Graphics g)
。
然后在paint2
中您喜欢在printTree
中:
if left paint2(left, g);
但是,您必须测量长度等,因为现在要在2D空间上绘图。
关于java - 在Java小程序上以递归方式调用paint绘画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36512761/