用C++编写算法建立一棵二叉树的二叉链表 输出二叉树的三种遍历序列,用递归算法完整代码
时间: 2024-12-11 07:45:19 浏览: 14
在C++中,我们可以使用结构体表示二叉树节点,并利用链表的形式存储二叉树。以下是创建二叉树、以及进行前序(Preorder)、中序(Inorder)和后序(Postorder)遍历的递归代码:
首先,定义二叉树节点:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
接着,我们实现建树函数(这里以数组作为输入示例,实际可以自定义节点值生成方式):
```cpp
TreeNode* buildTree(vector<int>& nums, int start = 0, int end = -1) {
if (start >= end) return nullptr; // 如果已经到边界,返回空节点
int mid = start + (end - start) / 2;
TreeNode* root = new TreeNode(nums[mid]); // 创建根节点
root->left = buildTree(nums, start, mid - 1); // 递归构建左子树
root->right = buildTree(nums, mid + 1, end); // 递归构建右子树
return root;
}
```
接下来,实现三种遍历的递归函数:
1. **前序遍历(Preorder)**:
```cpp
void preorder(TreeNode* root) {
if (root) {
cout << root->val << " "; // 访问根节点
preorder(root->left); // 遍历左子树
preorder(root->right); // 遍历右子树
}
}
```
2. **中序遍历(Inorder)**:
```cpp
void inorder(TreeNode* root) {
if (root) {
inorder(root->left); // 遍历左子树
cout << root->val << " "; // 访问根节点
inorder(root->right); // 遍历右子树
}
}
```
3. **后序遍历(Postorder)**:
```cpp
void postorder(TreeNode* root) {
if (root) {
postorder(root->left); // 遍历左子树
postorder(root->right); // 遍历右子树
cout << root->val << " "; // 访问根节点
}
}
```
最后,在主函数中创建树并进行遍历:
```cpp
int main() {
vector<int> nums = {1, 2, 3, 4, 5, 6, 7}; // 示例数据
auto root = buildTree(nums);
cout << "前序遍历: ";
preorder(root);
cout << endl;
cout << "中序遍历: ";
inorder(root);
cout << endl;
cout << "后序遍历: ";
postorder(root);
cout << endl;
return 0;
}
```
阅读全文