二叉树的创建,遍历和复制

#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;

}

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-28 22:13
投递影石Insta360等公司10个岗位 > 你都收到了哪些公司的感谢信?
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务