实验三 二叉树 一、实验目的 熟悉二叉树的结构,掌握二叉树的操作及实现。 二、实验内容 编写程序实现以下功能: 1.建立一棵二叉树,所有值均为整数(采用二叉链表存储方式); 2.输出该二叉树的前序、中序、后序遍历序列; 3. 把所有结点的值修改为其绝对值。 用c++表示
时间: 2024-12-21 07:30:34 浏览: 24
(报告和程序完善)西南交大-数据结构实验报告-树-二叉树的字符图形显示程序(半期测试)-完整程序及报告.zip
实验三:深入理解二叉树
**实验目的**
通过实践操作,让你更好地理解和掌握二叉树的基本数据结构,包括如何构建二叉链表,以及如何对二叉树进行基本的遍历(前序、中序和后序),同时涉及节点值的修改。
**实验内容步骤:**
1. **创建二叉树结构**:
使用C++定义一个二叉树节点,包含一个整数值(如`int value`),以及两个指向左右子节点的指针(如`Node* left`, `Node* right`)。初始化时,所有节点值设置为整数。
```cpp
struct Node {
int value;
Node* left;
Node* right;
// 其他构造函数等...
};
```
2. **建立二叉树**:
设计一个函数用于递归地插入节点到二叉树,例如使用前序遍历的方式,先插入根节点,再依次处理左、右子树。
```cpp
void insert(Node*& root, int value) {
if (root == nullptr) {
root = new Node{value, nullptr, nullptr};
} else {
if (value < root->value)
insert(root->left, value);
else
insert(root->right, value);
}
}
```
3. **遍历二叉树**:
- **前序遍历**(根-左-右):访问当前节点后,再访问左子树然后右子树。
- **中序遍历**(左-根-右):访问左子树,然后访问当前节点,最后访问右子树。
- **后序遍历**(左-右-根):访问左子树和右子树后再访问当前节点。
分别编写这三个遍历函数。
4. **修改节点值**:
创建一个函数,遍历整个二叉树,将每个节点的值改为其绝对值。
```cpp
void modifyAbsValue(Node* &root) {
if (root != nullptr) {
root->value = abs(root->value);
modifyAbsValue(root->left);
modifyAbsValue(root->right);
}
}
```
**相关问题--**:
1. 在实际应用中,二叉树有哪些常见的应用场景?
2. 如何在二叉树上实现删除节点的功能?
3. 如果二叉树是非空的,且所有节点值都相等,那么它的前序、中序和后序遍历结果会是什么?
阅读全文