用c++写一个完整的二叉树代码
时间: 2024-02-23 11:58:18 浏览: 77
以下是一个完整的二叉树的 C++ 代码示例:
```c++
#include <iostream>
using namespace std;
class TreeNode {
public:
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int val) {
this->val = val;
this->left = NULL;
this->right = NULL;
}
};
class BinaryTree {
public:
TreeNode *root;
BinaryTree() {
this->root = NULL;
}
void insert(int val) {
if (this->root == NULL) {
this->root = new TreeNode(val);
} else {
insertHelper(this->root, val);
}
}
void insertHelper(TreeNode *node, int val) {
if (val < node->val) {
if (node->left == NULL) {
node->left = new TreeNode(val);
} else {
insertHelper(node->left, val);
}
} else {
if (node->right == NULL) {
node->right = new TreeNode(val);
} else {
insertHelper(node->right, val);
}
}
}
void inorderTraversal() {
cout << "Inorder traversal: ";
inorderTraversalHelper(this->root);
cout << endl;
}
void inorderTraversalHelper(TreeNode *node) {
if (node != NULL) {
inorderTraversalHelper(node->left);
cout << node->val << " ";
inorderTraversalHelper(node->right);
}
}
void preorderTraversal() {
cout << "Preorder traversal: ";
preorderTraversalHelper(this->root);
cout << endl;
}
void preorderTraversalHelper(TreeNode *node) {
if (node != NULL) {
cout << node->val << " ";
preorderTraversalHelper(node->left);
preorderTraversalHelper(node->right);
}
}
void postorderTraversal() {
cout << "Postorder traversal: ";
postorderTraversalHelper(this->root);
cout << endl;
}
void postorderTraversalHelper(TreeNode *node) {
if (node != NULL) {
postorderTraversalHelper(node->left);
postorderTraversalHelper(node->right);
cout << node->val << " ";
}
}
};
int main() {
BinaryTree tree;
tree.insert(50);
tree.insert(30);
tree.insert(20);
tree.insert(40);
tree.insert(70);
tree.insert(60);
tree.insert(80);
tree.inorderTraversal();
tree.preorderTraversal();
tree.postorderTraversal();
return 0;
}
```
在这个示例中,我们定义了一个 `TreeNode` 类来表示二叉树中的节点,其中有一个整数 `val` 和两个指向左右子节点的指针 `left` 和 `right`。我们还定义了一个 `BinaryTree` 类来表示二叉树,其中有一个指向根节点的指针 `root`。
我们使用递归方式实现了二叉树的插入操作,其中 `insert` 函数负责将新节点插入到正确的位置上。我们还实现了三种不同的遍历方式:中序遍历、前序遍历和后序遍历。这里我们分别定义了 `inorderTraversalHelper`、`preorderTraversalHelper` 和 `postorderTraversalHelper` 函数来实现遍历操作,并分别在 `inorderTraversal`、`preorderTraversal` 和 `postorderTraversal` 函数中调用。最后,我们在 `main` 函数中创建了一棵二叉搜索树,并分别进行了三种不同的遍历操作。
阅读全文