JVAV 用递归的方法画一棵树
发布网友
发布时间:2022-07-29 12:43
我来回答
共1个回答
热心网友
时间:2023-11-23 18:24
给个函数你,自己调吧。
递归原理:
如果我求得第1个根节点和以它为中心的左右子树,那么整棵数可以求得,
如果我求得左边下一个根节点和以它为中心的左右子树,那么左子树可以求得,
如果我求得右边下一个根节点和以它为中心的左右子树,那么右子树可以求得,
由此可知,树和子树具有递归关系,
因此用f表示树,左子树怎么表示呢?很明显是f,右子树也是f,他们功能是相同的,参数不同而已。
f(x=1000,y=1000,width=1,jiao=0,flag=true){//画整棵树,x,y为起始坐标,width为起始长度,jiao为起始角度,flag为起始标志
if(flag){
line(x,y,x,y+1);//画第一条
y=y+1;
}
X_L=-3/4*width*sin(jiao+30)+x;//求出下一个左节点的横坐标
Y_L=3/4*width*cos(jiao+30)+y;//求出下一个左节点的纵坐标
X_R=2/3*width*sin(jiao+50)+x;//求出下一个右节点的横坐标
Y_R=2/3*width*cos(jiao+50)+y;//求出下一个右节点的纵坐标
if(tan(jiao+30)==cot120 ||cot(jiao+50)==tan40){//如果某个坐标和前面坐标组成的斜率和第2或第3条斜率相同时,说明画完了
return;
}
line(x,y,X_L,Y_L);//画左边线
f(X_L,Y_L,3/4*width,jiao+30,false);//求得左子树
line(x,y,X_R,Y_R);//画右边线
f(X_R,Y_R,2/3*width,jiao+50,false);//求得右子树
}