二叉树
生成一个二叉树:
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;
}
知识点明天再说
浙公网安备 33010602011771号