2022年 11月 4日

Python 二叉树

本次用Turtle模块实现Python二叉树

二叉树可以用递归来绘制

首先,导入模块

import turtle

设置每个树枝的倾斜角度

de=10

定义二叉树tree函数

  1. def tree(x,y,degree,length,n):
  2. if n<=5: # 树叶
  3. t.pencolor("green")
  4. else: # 树枝
  5. t.pencolor("brown")
  6. t.pu()
  7. t.goto(x,y)
  8. t.setheading(degree)
  9. t.pd()
  10. t.forward(length)
  11. if n==1:
  12. return
  13. else:
  14. pos=t.pos()
  15. tree(pos[0],pos[1],degree+de,length,n-1) # 向左延申的树枝
  16. tree(pos[0],pos[1],degree-de,length,n-1) # 向右延申的树枝

设置turtle画笔参数

  1. t.speed(0) # 速度加快
  2. t.delay(0) # 由于设置为最高速度后速度依然很慢,画布设置为无延迟
  3. t.tracer(400) # 依然很慢。。。加速400倍
  4. tree(0,-300,90,30,10) # 画二叉树
  5. t.done() # 窗口保持显示

最终代码

  1. import turtle as t
  2. de=10 # 每根树枝的倾斜角度
  3. def tree(x,y,degree,length,n):
  4. if n<=5:
  5. t.pencolor("green")
  6. else:
  7. t.pencolor("brown")
  8. t.pu()
  9. t.goto(x,y)
  10. t.setheading(degree)
  11. t.pd()
  12. t.forward(length)
  13. if n==1:
  14. return
  15. else:
  16. pos=t.pos()
  17. tree(pos[0],pos[1],degree+de,length,n-1)
  18. tree(pos[0],pos[1],degree-de,length,n-1)
  19. t.speed(0)
  20. t.delay(0)
  21. t.tracer(400)
  22. tree(0,-300,90,30,10)
  23. t.done()

让二叉树的倾斜角度、长度和数量变得随机

导入random

import random

将函数改写为

  1. def tree(x,y,degree,length,n):
  2. if n<=5:
  3. t.pencolor("green")
  4. else:
  5. t.pencolor("brown")
  6. t.pu()
  7. t.goto(x,y)
  8. t.setheading(degree)
  9. t.pd()
  10. t.forward(length)
  11. if n==1:
  12. return
  13. else:
  14. pos=t.pos()
  15. 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)
  16. 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条

效果:


制作不易,喜欢的话记得关注哦!