1. 按照先序遍历的方式创建一个二叉链表; 2. 编程实现二叉树的先序、中序和后序算法; 3. 分别以先序、中序和后序的方式输出之前创建的二叉链表。用c++写
时间: 2024-12-16 19:22:13 浏览: 5
1. **按照先序遍历创建二叉链表**:
先序遍历顺序是根节点 -> 左子树 -> 右子树。在创建二叉链表时,你可以这样做:
- 定义结构体 `Node`,包含值 `val` 和两个指针 `left` 和 `right`。
- 创建根节点时,将当前节点设置为根,并递归地处理左右子节点。
```cpp
struct Node {
int val;
Node* left;
Node* right;
};
void createPreorderList(Node** root, vector<int>& values) {
if (values.empty()) return;
*root = new Node{values[0]};
createPreorderList(&(*root)->left, values.begin() + 1);
createPreorderList(&(*root)->right, values.begin() + 1 + (*root)->left->size());
}
```
2. **二叉树遍历算法(C++实现)**:
- **先序遍历(Preorder)**: 递归函数 `preorder`
- **后序遍历(Postorder)**: 递归函数 `postorder`
```cpp
void preorder(Node* node) {
if (!node) return;
cout << node->val << " ";
preorder(node->left);
preorder(node->right);
}
void inorder(Node* node) {
if (!node) return;
inorder(node->left);
cout << node->val << " ";
inorder(node->right);
}
void postorder(Node* node) {
if (!node) return;
postorder(node->left);
postorder(node->right);
cout << node->val << " ";
}
```
3. **输出二叉链表(假设已经构建完成)**:
调用上述遍历函数即可分别输出先序、中序和后序的结果:
```cpp
// 假设我们有一个二叉链表的头结点 root
preorder(root); // 输出先序
cout << endl;
inorder(root); // 输出中序
cout << endl;
postorder(root); // 输出后序
```
阅读全文