二叉树

生成一个二叉树:

include<bits/stdc++.h>
using namespace std;
// 二叉树节点结构
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;

// 构造函数
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

// 二叉树类
class BinaryTree {
private:
TreeNode* root;

// 私有辅助函数:插入节点
TreeNode* insertNode(TreeNode* node, int val) {
if (node == nullptr) {
return new TreeNode(val);
}

if (val < node->val) {
node->left = insertNode(node->left, val);
} else {
node->right = insertNode(node->right, val);
}

return node;
}

// 私有辅助函数:前序遍历
void preOrder(TreeNode* node) {
if (node == nullptr) return;

cout << node->val << " ";
preOrder(node->left);
preOrder(node->right);
}

// 私有辅助函数:中序遍历
void inOrder(TreeNode* node) {
if (node == nullptr) return;

inOrder(node->left);
cout << node->val << " ";
inOrder(node->right);
}

// 私有辅助函数:后序遍历
void postOrder(TreeNode* node) {
if (node == nullptr) return;

postOrder(node->left);
postOrder(node->right);
cout << node->val << " ";
}

// 私有辅助函数:销毁树
void destroyTree(TreeNode* node) {
if (node == nullptr) return;

destroyTree(node->left);
destroyTree(node->right);
delete node;
}

public:
// 构造函数
BinaryTree() : root(nullptr) {}

// 析构函数
~BinaryTree() {
destroyTree(root);
}

// 插入节点
void insert(int val) {
root = insertNode(root, val);
}

// 前序遍历
void preOrderTraversal() {
cout << "前序遍历: ";
preOrder(root);
cout << endl;
}

// 中序遍历
void inOrderTraversal() {
cout << "中序遍历: ";
inOrder(root);
cout << endl;
}

// 后序遍历
void postOrderTraversal() {
cout << "后序遍历: ";
postOrder(root);
cout << endl;
}
};

// 测试函数
int main() {
BinaryTree tree;

// 插入节点
tree.insert(50);
tree.insert(30);
tree.insert(70);
tree.insert(20);
tree.insert(40);
tree.insert(60);
tree.insert(80);

// 遍历二叉树
tree.preOrderTraversal(); // 根左右
tree.inOrderTraversal(); // 左根右
tree.postOrderTraversal(); // 左右根

return 0;
}

知识点明天再说

posted @ 2025-08-07 21:04  暗神酱  阅读(17)  评论(0)    收藏  举报