如何利用python实现二叉树?附代码讲解_python定义二叉树的结构

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全套学习资料已经上传


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值