Python数据结构--树遍历算法
2024-08-28 08:20:15
'''
遍历是访问树的所有节点的过程,也可以打印它们的值。 因为所有节点都通过边(链接)连接,所以始终从根(头)节点开始。
也就是说,我们不能随机访问树中的一个节点。 这里介绍三种方式来遍历一棵树 -顺序遍历 -前序遍历 -后序遍历
''' class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data def insert(self, data):
if self.data:
if data < self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
elif data > self.data:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data # Left -> Root -> Right 顺序遍历
def inorderTraversal(self, root):
res = []
if root:
res = self.inorderTraversal(root.left)
res.append(root.data)
res = res + self.inorderTraversal(root.right)
return res # Root -> Left ->Right 前序遍历
def PreorderTraversal(self, root):
res = []
if root:
res.append(root.data)
res = res + self.PreorderTraversal(root.left)
res = res + self.PreorderTraversal(root.right)
return res # Left ->Right -> Root 后序遍历
def PostorderTraversal(self, root):
res = []
if root:
res = self.PostorderTraversal(root.left)
res = res + self.PostorderTraversal(root.right)
res.append(root.data)
return res root = Node(27)
root.insert(14)
root.insert(35)
root.insert(10)
root.insert(19)
root.insert(31)
root.insert(42)
print(root.inorderTraversal(root))
print(root.PreorderTraversal(root))
print(root.PostorderTraversal(root))
最新文章
- 【原】SDWebImage源码阅读(五)
- HTML之JS学习
- 开源网站.NETMVC+ Layui+SqlSugar+RestSharp
- java.lang.UnsatisfiedLinkError: C:\apache-tomcat-8.0.21\bin\tcnative-1.dll: Can&#39;t load IA 32-bit .dll on a AMD 64-bit platform
- valgind使用错误——检测不同位目标程序
- struts2 if标签示例
- [改善Java代码]多种最值算法,适时选择
- Python (九) 协程以及数据库操作
- PHP 动态调整内存限制
- R语言︱用excel VBA把xlsx批量转化为csv格式
- C++实验指导
- SQLServer之创建事务序列化
- 移动端无法复制:使用clipboard.js碰到的一个小问题
- oracle if/else功能的实现的3种写法
- 解决git中文乱码问题
- [Winform]Media Player播放控制面板控制,单击事件截获
- ovs 下流表port 1进入,port 1出去
- Objective-C:三种文件导入的方式比较
- Hadoop NameNode 高可用 (High Availability) 实现解析
- java中String的内存位置