二叉树的创建,遍历和复制
#include <iostream>
using namespace std;
// 创建树
struct tree {
int val;
tree* left;
tree* right;
// 构造函数
tree(int val) : val(val), left(nullptr), right(nullptr) {}
};
// 插入节点
tree* input(tree* root, int val) {
if (root == nullptr) {
return new tree(val);
}
if (root->val > val) {
root->left = input(root->left, val);
} else if (root->val < val) {
root->right = input(root->right, val);
}
return root;
}
// 输入节点
void shuru(tree*& root) {
int n, a[10000];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
root = input(root, a[i]); // 更新根节点
}
}
// 前序遍历 (根 -> 左 -> 右)
void qpaixu(tree* root) {
if (root != nullptr) {
cout << root->val << " ";
qpaixu(root->left);
qpaixu(root->right);
}
}
// 中序遍历 (左 -> 根 -> 右)
void zpaixu(tree* root) {
if (root != nullptr) {
zpaixu(root->left);
cout << root->val << " ";
zpaixu(root->right);
}
}
// 后序遍历 (左 -> 右 -> 根)
void hpaixu(tree* root) {
if (root != nullptr) {
hpaixu(root->left);
hpaixu(root->right);
cout << root->val << " ";
}
}
// 删除整棵树的函数
void deleteTree(tree* root) {
if (root == nullptr) return;
deleteTree(root->left);
deleteTree(root->right);
delete root;
}
int main() {
tree* b = nullptr;
shuru(b);
cout << "前序遍历: ";
qpaixu(b);
cout << endl;
// 清理内存
deleteTree(b);
return 0;
}