[数据结构] 二叉树的遍历

本文介绍了二叉树的链式存储结构和遍历方法,包括前序、中序、后序遍历的递归与迭代实现。递归法遵循前序:根-左-右,中序:左-根-右,后序:左-右-根的规则。迭代法利用栈进行操作,中序遍历需要找到左子树结束的标志,前序和后序遍历则需要调整入栈顺序。此外,提供了LeetCode相关题目链接以供实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆,属于完全二叉树,一般用列表存储。但对于不完全二叉树,用列表存储会有大量空位产生,因此采用链式存储。

二叉树的链式存储:将二叉树的节点定义为一个对象,节点之间通过类似链表的链接方式来连接。

# Definition for a binary tree node.
class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

考察方式:
【1】给你一棵树,写出前序、中序、后序的序列。递归法和迭代法。
【2】给出前序、中序、后序的序列其中之二,让你画出一棵树(一般给出中序,再给出一个前序或者后序。很少给前序和后序,因为极容易出现不唯一的情况)

总的规律:
· 前序:根在小团体第一位
· 后序:根在小团体的最后一位
· 中序:根分开了左右子树

二叉树的遍历

在这里插入图片描述
图中二叉树的遍历:
· 前序遍历:EACBDGF
· 中序遍历:ABCDEGF
· 后序遍历:BDCAFGE
· 层次遍历:EAGCFBD

二叉树的前三种遍历是深度优先DFS,可以用递归(实质是 栈)来实现。而最后一种层次遍历是广度优先BFS。

递归

前序遍历:打印-左-右
中序遍历:左-打印-右
后序遍历:左-右-打印
在这里插入图片描述

中序遍历

以中序遍历为例,
终止条件: 当前节点为空时
子问题: 递归的调用左节点,打印当前节点,再递归调用右节点

Version 1
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution(object):
    def inorderTraversal(self, root):
        res=[]
        self.helper(root, res)    ### 带self
        return res
    def helper(self, root, res):  ### def helper(self,...) 带self
        if root
### 高并发场景中的内存池设计与优化 #### 设计原则 在高并发环境中,内存池通过预先分配大块内存来减少频繁的系统调用开销并控制内存碎片化。这种机制显著提高了多线程应用下的内存管理和释放速度[^1]。 #### 实现方式 为了适应不同应用场景的需求,内存池可以根据具体业务逻辑定制其内部结构: - **固定大小对象池**:适用于所有对象具有相同尺寸的情况。这种方式简化了内存管理流程,因为每次只需处理预定义长度的数据单元即可。 - **可变大小对象池**:当应用程序涉及多种类型的对象时,则需构建支持任意尺寸数据存储的能力。此时可通过链表或其他高效查找算法维护多个分区,每个分区负责特定范围内的对象实例创建和销毁操作。 ```cpp class MemoryPool { public: void* allocate(size_t size); bool deallocate(void *ptr); private: std::vector<Chunk*> chunks_; // 存储已划分好的内存片段列表 }; ``` #### 优化策略 针对高并发特性进一步改进内存池表现的方法包括但不限于以下几个方面: - **无锁编程模型**:利用原子指令代替传统互斥锁,在保证线程安全的同时极大程度降低了同步成本。对于某些热点路径还可以考虑引入读写分离机制以提升整体吞吐量。 - **本地缓存层**:为每一个工作线程配备独立的小型缓冲区用于临时存放待分配/回收的对象地址,以此减少全局资源竞争带来的延迟影响。 - **快速失败检测**:一旦发现当前节点无法满足新的内存请求就立即返回错误码给上游模块而不是长时间等待其他组件完成相应动作;这有助于及时止损并将压力分散到整个集群当中去。 - **自适应调整参数**:依据实时监控指标动态调节初始容量、增长因子等配置项,确保即使面对突发流量冲击也能保持稳定的服务质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值