如何使用C++模板类来实现一个基本的二叉树数据结构,包括输出前序、中序和后序遍历等操作?
时间: 2024-11-27 12:24:14 浏览: 13
在C++中,可以使用模板类和递归函数来创建一个基本的二叉树数据结构。首先,我们定义一个节点模板类`TreeNode`:
```cpp
template <typename T>
class TreeNode {
public:
T data;
TreeNode* left;
TreeNode* right;
TreeNode(T val) : data(val), left(nullptr), right(nullptr) {}
};
```
接下来,我们可以创建一个二叉树类`BinaryTree`,包含插入节点和遍历功能:
```cpp
template <typename T>
class BinaryTree {
private:
TreeNode<T>* root;
public:
BinaryTree() : root(nullptr) {}
// 插入节点
void insertNode(TreeNode<T>** node, T value) {
if (*node == nullptr) {
*node = new TreeNode<T>(value);
} else {
if (value < **node->data)
insertNode(&(*node)->left, value);
else
insertNode(&(*node)->right, value);
}
}
// 前序遍历
void preOrderTraversal(TreeNode<T>* node) {
if (node != nullptr) {
std::cout << node->data << " ";
preOrderTraversal(node->left);
preOrderTraversal(node->right);
}
}
// 中序遍历
void inOrderTraversal(TreeNode<T>* node) {
if (node != nullptr) {
inOrderTraversal(node->left);
std::cout << node->data << " ";
inOrderTraversal(node->right);
}
}
// 后序遍历
void postOrderTraversal(TreeNode<T>* node) {
if (node != nullptr) {
postOrderTraversal(node->left);
postOrderTraversal(node->right);
std::cout << node->data << " ";
}
}
};
```
现在你可以创建一个`BinaryTree<int>`实例并进行操作:
```cpp
int main() {
BinaryTree<int> tree;
tree.insertNode(&tree.root, 50);
tree.insertNode(&tree.root, 30);
tree.insertNode(&tree.root, 20);
tree.insertNode(&tree.root, 40);
tree.insertNode(&tree.root, 70);
tree.insertNode(&tree.root, 60);
std::cout << "Preorder traversal: ";
tree.preOrderTraversal(tree.root);
std::cout << "\nInorder traversal: ";
tree.inOrderTraversal(tree.root);
std::cout << "\nPostorder traversal: ";
tree.postOrderTraversal(tree.root);
return 0;
}
```
阅读全文