class Tree(): def init(self): self.root = None
### 层遍历
树具有一个层次结构,从根节点最高层到最低层,每层从左向右遍历。需要借助队列实现。
def level_travel(self): if self.root == None: return queue = [self.root] while queue: cur = node = queue.pop(0) print(cur.elem, end=" ") if cur.lchild != None: queue.append(cur.lchild) if cur.rchild != None: queue.append(cur.rchild)
### 添加节点
树具有一个层次结构,我们在每层按照从左至右的方向添加节点。我们从第一层开始,依次判断根节点是否有左子节点和右子节点,如果没有,则添加;如果有,则转到第二层。以此类推。实现上与层遍历有点类似。
def add(self, item): node = Node(item) # 如果节点为空 if self.root == None: self.root = node return queue = [self.root] while queue: cur = queue.pop(0) if cur.lchild == None: cur.lchild = node return else: queue.append(cur.lchild) if cur.rchild == None: cur.rchild = node return else: queue.append(cur.rchild)
备注:添加节点while queue:
cur = node = queue.pop(0),不能把queue.pop(0)的值赋给node, 因为node = Node(item), 如果赋给了node, 就会让node无限指向自己,应该写成cur = queue.pop(0)
### 先序遍历
先序遍历是先遍历根节点,再遍历左子树,最后遍历右子树。对于遍历子树而言,也是遍历子树的根节点,再遍历子树的左子树,最后遍历子树的右子树。可以用递归实现。
def preorder_travel(self, node):
# 如果节点为空
if node == None:
return
print(node.elem, end=" ")
self.preorder_travel(node.lchild)
self.preorder_travel(node.rchild)
### 中序遍历
中序遍历则先遍历左子树,再遍历根节点,最后遍历右子树。
def inorder_travel(self, node):
# 如果节点为空
if node == None:
return
self.inorder_travel(node.lchild)
print(node.elem, end=" ")
self.inorder_travel(node.rchild)
### 后序遍历
后续遍历先遍历左子树,再遍历右子树,最后遍历根节点。
def postorder_travel(self, node):
# 如果节点为空
if node == None:
return
self.postorder_travel(node.lchild)
self.postorder_travel(node.rchild)
print(node.elem, end=" ")
### 测试
if name == “main”: t = Tree() t.add(0) t.add(1) t.add(2) t.add(3) t.add(4) t.add(5) t.add(6) t.add(7) t.add(8) t.add(9) t.level_travel() print() t.preorder_travel(t.root) print() t.inorder_travel(t.root) print() t.postorder_travel(t.root) print()
今天的小知识学会了么?
---
### 资源分享
**下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 `【保证100%免费】`**
文末有福利领取哦~
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
👉**一、Python所有方向的学习路线**
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。![img](https://img-blog.csdnimg.cn/c67c0f87cf9343879a1278dfb067f802.png)
👉**二、Python必备开发工具**
![img](https://img-blog.csdnimg.cn/757ca3f717df4825b7d90a11cad93bc7.png)
👉**三、Python视频合集**
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
![img](https://img-blog.csdnimg.cn/31066dd7f1d245159f21623d9efafa68.png)
👉 **四、实战案例**
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。**(文末领读者福利)**
![img](https://img-blog.csdnimg.cn/e78afb3dcb8e4da3bae5b6ffb9c07ec7.png)
👉**五、Python练习题**
检查学习结果。
![img](https://img-blog.csdnimg.cn/280da06969e54cf180f4904270636b8e.png)
👉**六、面试资料**
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
![img](https://img-blog.csdnimg.cn/a9d7c35e6919437a988883d84dcc5e58.png)
![img](https://img-blog.csdnimg.cn/5db8141418d544d3a8e9da4805b1a3f9.png)
👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传