二叉树的基本操作的源代码
时间: 2023-07-15 08:11:34 浏览: 51
下面是二叉树的基本操作的源代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 二叉树的先序遍历(递归实现)
void PreorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
cout << root->val << " ";
PreorderTraversal(root->left);
PreorderTraversal(root->right);
}
// 二叉树的中序遍历(递归实现)
void InorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
InorderTraversal(root->left);
cout << root->val << " ";
InorderTraversal(root->right);
}
// 二叉树的后序遍历(递归实现)
void PostorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
PostorderTraversal(root->left);
PostorderTraversal(root->right);
cout << root->val << " ";
}
// 二叉树的层序遍历(非递归实现)
void LevelorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
cout << node->val << " ";
q.pop();
if (node->left != NULL) {
q.push(node->left);
}
if (node->right != NULL) {
q.push(node->right);
}
}
}
// 二叉树的查找
TreeNode* Search(TreeNode* root, int val) {
if (root == NULL) {
return NULL;
}
if (root->val == val) {
return root;
}
TreeNode* left = Search(root->left, val);
if (left != NULL) {
return left;
}
TreeNode* right = Search(root->right, val);
if (right != NULL) {
return right;
}
return NULL;
}
// 二叉树的插入
void Insert(TreeNode* root, int val) {
if (root == NULL) {
return;
}
if (root->left == NULL) {
root->left = new TreeNode(val);
return;
}
if (root->right == NULL) {
root->right = new TreeNode(val);
return;
}
Insert(root->left, val);
Insert(root->right, val);
}
// 二叉树的删除
void Delete(TreeNode* root, int val) {
if (root == NULL) {
return;
}
if (root->left != NULL && root->left->val == val) {
TreeNode* temp = root->left;
root->left = NULL;
delete temp;
return;
}
if (root->right != NULL && root->right->val == val) {
TreeNode* temp = root->right;
root->right = NULL;
delete temp;
return;
}
Delete(root->left, val);
Delete(root->right, val);
}
int main() {
// 创建二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
// 二叉树的遍历
cout << "PreorderTraversal: ";
PreorderTraversal(root);
cout << endl;
cout << "InorderTraversal: ";
InorderTraversal(root);
cout << endl;
cout << "PostorderTraversal: ";
PostorderTraversal(root);
cout << endl;
cout << "LevelorderTraversal: ";
LevelorderTraversal(root);
cout << endl;
// 二叉树的查找
cout << "Search: " << Search(root, 5)->val << endl;
// 二叉树的插入
Insert(root, 8);
cout << "LevelorderTraversal: ";
LevelorderTraversal(root);
cout << endl;
// 二叉树的删除
Delete(root, 5);
cout << "LevelorderTraversal: ";
LevelorderTraversal(root);
cout << endl;
return 0;
}
```