
Python -二叉树 创建与遍历算法(很详细,转自国外教程)
发布日期:2021-05-10 04:41:38
浏览次数:28
分类:精选文章
本文共 2195 字,大约阅读时间需要 7 分钟。
树是一个由边连接的节点组成的非线性数据结构,具有明确的根节点和父节点关系。每个节点可以具有零个或多个子节点。树的插入过程遵循特定规则,即将新值与当前节点的值进行比较,决定其位置,并按照递归方式处理子树。
创建树
创建根节点并初始化树结构:
class Node: def __init__(self, data): self.left = None self.right = None self.data = dataroot = Node(10)
插入节点
插入功能基于节点的比较,决定左或右添加:
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 not self.left: self.left = Node(data) else: self.left.insert(data) elif data > self.data: if not self.right: self.right = Node(data) else: self.right.insert(data) else: self.data = data
遍历树
通过不同的顺序访问节点数据。
顺序遍历 (Preorder)
从根访问左,然后右。
class Node: def __init__(self, data): self.left = None self.right = None self.data = data def preorderTraversal(self, root): res = [] if root: res.append(root.data) res += self.preorderTraversal(root.left) res += self.preorderTraversal(root.right) return res
中序遍历 (Inorder)
访问左,根,右。
class Node: def __init__(self, data): self.left = None self.right = None self.data = data def inorderTraversal(self, root): res = [] if root: res = self.inorderTraversal(root.left) res.append(root.data) res += self.inorderTraversal(root.right) return res
后序遍历 (Postorder)
访问左,右,根。
class Node: def __init__(self, data): self.left = None self.right = None self.data = data def postorderTraversal(self, root): res = [] if root: res = self.postorderTraversal(root.left) 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) # 右的右
不同遍历结果:
- 顺序遍历:
[27, 14, 10, 19, 35, 31, 42]
- 中序遍历:
[10,14,19,27,31,35,42]
- 后序遍历:
[10,19,14,31,42,35,27]
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月19日 15时19分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
13个JavaScript单行式代码
2019-03-07
5个很常用的CSS3网页小实例
2019-03-07
前端基础知识整理汇总(上)
2019-03-07
微信小程序 - 实现左滑动删除功能
2019-03-07
<s>
2019-03-07
OBDC无法创建sql server连接
2019-03-07
常见错误
2019-03-07
finger
2019-03-07
实例属性和类属性
2019-03-07
Oracle
2019-03-07
序列化与反序列化
2019-03-07
排除Transformation Errors
2019-03-07
错误总结
2019-03-07
一个移动端的图片手写签名应用
2019-03-07
如何使用linux系统自带的led驱动
2019-03-07
泛知识类视频会改变短视频行业格局吗?
2019-03-07
IP-Guard回收客户端加密授权,已经加密的文档如何解密
2019-03-07
IP-GUARD支持的数据库版本
2019-03-07
IP-Guard文档权限管理,让核心数据使用更安全
2019-03-07