用递归的方法实现以下算法: 1.(基础)以二叉链表表示二叉树,建立一棵二叉树(书中120页算法5.3),具体实现见程序5.3.cpp。 2.(基础)输出二叉树的中序遍历结果(书中117页算法5.1),具体实现见程序5.1.cpp。 3.(进阶)输出二叉树的前序遍历及后序遍历结果。
时间: 2024-12-10 11:49:51 浏览: 12
设一棵二叉树以二叉链表表示,试编写有关二叉树的递归算法
5星 · 资源好评率100%
递归是一种通过将复杂的问题分解成更小的、相似的子问题来解决问题的技术。对于二叉树的遍历,我们通常会使用递归来实现:
1. **基础步骤** (构建二叉树)
- 对于二叉链表表示的二叉树,每个节点包含一个值和两个指向左右子节点的指针。你可以创建一个`Node`类,然后通过循环或递归的方式从链表的头开始构造二叉树。
```cpp
struct Node {
int data;
Node* left, *right;
};
// 递归函数,输入根节点和当前遍历状态(如空、左、右)
void buildTree(Node*& root, std::vector<int>& input) {
// 如果输入结束,则返回
if (input.empty()) return;
// 创建新节点并插入数据
Node* newNode = new Node{input.front(), nullptr, nullptr};
root = newNode;
// 递归处理剩余部分
buildTree(newNode->left, input.begin() + 1); // 左子树
buildTree(newNode->right, input.begin() + 1 + newNode->left->size()); // 右子树
}
```
2. **基础操作** (中序遍历)
中序遍历通常采用递归形式:先遍历左子树,访问根节点,再遍历右子树。
```cpp
void inorderTraversal(Node* root) {
if (root == nullptr) return;
inorderTraversal(root->left);
std::cout << root->data << " ";
inorderTraversal(root->right);
}
```
3. **进阶操作** (前序遍历和后序遍历)
- 前序遍历:根 -> 左 -> 右
- 后序遍历:左 -> 右 -> 根
前序遍历和后序遍历也可以类似地递归实现:
```cpp
// 前序遍历
void preorderTraversal(Node* root) {
if (root == nullptr) return;
std::cout << root->data << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
// 后序遍历
void postorderTraversal(Node* root) {
if (root == nullptr) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
std::cout << root->data << " ";
}
```
阅读全文