书写代码实现二叉树的基本操作
时间: 2023-09-11 09:06:27 浏览: 43
好的,我可以回答这个问题。二叉树的基本操作包括插入节点、删除节点、查找节点、遍历等。以下是 C++ 代码实现样例:
```c++
#include<iostream>
using namespace std;
// 二叉树的节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x): val(x),left(NULL),right(NULL) {}
};
// 插入节点
void insert(TreeNode*& root,int val) {
if(!root) {
root = new TreeNode(val);
return;
}
if(val<root->val) insert(root->left,val);
else insert(root->right,val);
}
// 删除节点
void del(TreeNode*& root,int val) {
if(!root) return;
if(val<root->val) del(root->left,val);
else if(val>root->val) del(root->right,val);
else {
if(!root->left) root = root->right;
else if(!root->right) root = root -> left;
else {
TreeNode* temp = root -> right;
while(temp -> left) temp = temp -> left;
root -> val = temp -> val;
del(root -> right,temp -> val);
}
}
}
// 查找节点
bool search(TreeNode*& root,int val) {
if(root == NULL) {
return false;
} else if(root -> val == val) {
return true;
} else if(val < root -> val) {
return search(root -> left,val);
} else {
return search(root -> right,val);
}
}
// 前序遍历
void preorder(TreeNode* root) {
if(!root) return;
cout<<root->val<<" ";
preorder(root->left);
preorder(root->right);
}
// 中序遍历
void inorder(TreeNode* root) {
if(!root) return;
inorder(root->left);
cout<<root->val<<" ";
inorder(root->right);
}
// 后序遍历
void postorder(TreeNode* root) {
if(!root) return;
postorder(root->left);
postorder(root->right);
cout<<root->val<<" ";
}
int main() {
TreeNode* root = new TreeNode(5);
int list[5] = {3,7,1,9,8};
for(int i=0;i<5;i++) insert(root,list[i]);
del(root,3);
cout<<"Inorder traversal: ";
inorder(root);
cout<<endl;
cout<<"Search for 1: "<<search(root,1)<<endl;
cout<<"Preorder traversal: ";
preorder(root);
cout<<endl;
cout<<"Postorder traversal: ";
postorder(root);
cout<<endl;
return 0;
}
```
以上是二叉树基本操作的样例代码,建议您自行测试和学习,以加深对二叉树的理解和掌握。