本次用Turtle模块实现Python二叉树
二叉树可以用递归来绘制
首先,导入模块
import turtle
设置每个树枝的倾斜角度
de=10
定义二叉树tree函数
- def tree(x,y,degree,length,n):
- if n<=5: # 树叶
- t.pencolor("green")
- else: # 树枝
- t.pencolor("brown")
- t.pu()
- t.goto(x,y)
- t.setheading(degree)
- t.pd()
- t.forward(length)
- if n==1:
- return
- else:
- pos=t.pos()
- tree(pos[0],pos[1],degree+de,length,n-1) # 向左延申的树枝
- tree(pos[0],pos[1],degree-de,length,n-1) # 向右延申的树枝
设置turtle画笔参数
- t.speed(0) # 速度加快
- t.delay(0) # 由于设置为最高速度后速度依然很慢,画布设置为无延迟
- t.tracer(400) # 依然很慢。。。加速400倍
- tree(0,-300,90,30,10) # 画二叉树
- t.done() # 窗口保持显示
最终代码
- import turtle as t
-
- de=10 # 每根树枝的倾斜角度
-
- def tree(x,y,degree,length,n):
- if n<=5:
- t.pencolor("green")
- else:
- t.pencolor("brown")
- t.pu()
- t.goto(x,y)
- t.setheading(degree)
- t.pd()
- t.forward(length)
- if n==1:
- return
- else:
- pos=t.pos()
- tree(pos[0],pos[1],degree+de,length,n-1)
- tree(pos[0],pos[1],degree-de,length,n-1)
-
- t.speed(0)
- t.delay(0)
- t.tracer(400)
- tree(0,-300,90,30,10)
- t.done()
让二叉树的倾斜角度、长度和数量变得随机
导入random
import random
将函数改写为
- def tree(x,y,degree,length,n):
- if n<=5:
- t.pencolor("green")
- else:
- t.pencolor("brown")
- t.pu()
- t.goto(x,y)
- t.setheading(degree)
- t.pd()
- t.forward(length)
- if n==1:
- return
- else:
- pos=t.pos()
- tree(pos[0],pos[1],degree+de+random.randint(-5,5),length+random.randint(-5,5),n-1 if random.randint(1,100)<=90 else n)
- tree(pos[0],pos[1],degree-de+random.randint(-5,5),length+random.randint(-5,5),n-1 if random.randint(1,100)<=90 else n)
最后两行:倾斜角偏移-5~5度,长度偏移-5~5,树枝10%的可能增加1条
效果:
制作不易,喜欢的话记得关注哦!