C/C++编程笔记:数据结构二叉树的查找(前序、中序、后序、层序遍历)

本文介绍了如何使用C/C++建立含有n个结点的二叉树,并通过二叉链表进行存储。详细讲解了前序、中序、后序和层序遍历二叉树的方法,提供了相应的代码实现。通过示例展示了不同遍历方式下的结果,帮助读者理解二叉树遍历概念。

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

建立一棵含有n个结点的二叉树,采用二叉链表存储;

输出前序、中序、后序、、层序遍历该二叉树的遍历结果。

定义二叉树的数据类型——二叉树结点结构体BiNode。建立二叉链表可以采用扩展二叉树的一个遍历序列,例如前序序列,将扩展二叉树的前序序列由键盘输入,建立该二叉树的二叉链表存储。

简单起见,本实验假定二叉树的数据元素为char型

用模板类改写

创建一个拓展二叉树,我们用#来代指虚结点:

前序遍历的实现:

中序遍历的实现:

后序遍历的实现:

层序遍历的实现:

### 二叉树前序、中后序遍历 #### 定义与顺 二叉树遍历是指按照某种次访问二叉树中的所有节点。常见的三种遍历方式及其顺如下: 1. **前序遍历(Preorder Traversal)** 访问顺为:根节点 -> 左子树 -> 右子树[^3]。 2. **中遍历(Inorder Traversal)** 访问顺为:左子树 -> 根节点 -> 右子树[^2]。 3. **后序遍历(Postorder Traversal)** 访问顺为:左子树 -> 右子树 -> 根节点[^4]。 --- #### 实现方法 以下是基于递归实现的 Python 代码示例,用于完成二叉树前序、中后序遍历。 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def preorder_traversal(root): """前序遍历""" if root is None: return [] result = [root.val] result += preorder_traversal(root.left) result += preorder_traversal(root.right) return result def inorder_traversal(root): """中遍历""" if root is None: return [] result = inorder_traversal(root.left) result.append(root.val) result += inorder_traversal(root.right) return result def postorder_traversal(root): """后序遍历""" if root is None: return [] result = postorder_traversal(root.left) result += postorder_traversal(root.right) result.append(root.val) return result ``` 以上代码定义了一个 `TreeNode` 类表示二叉树的节点,并提供了三个函数分别实现前序、中后序遍历。 --- #### 示例应用 假设有一颗简单的二叉树结构如下所示: ``` A / \ B C / \ D E ``` 对应的遍历结果为: - 前序遍历:A -> B -> D -> E -> C[^3]。 - 中遍历:D -> B -> E -> A -> C。 - 后序遍历:D -> E -> B -> C -> A[^4]。 通过调用上述代码可以验证这些结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值