二叉树基本操作的c++源代码
时间: 2023-07-16 15:12:47 浏览: 81
以下是二叉树的基本操作的C++源代码,包括创建二叉树、先序遍历、中序遍历、后序遍历和层次遍历。
```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 createTree(TreeNode*& root) {
int x;
cin >> x;
if (x == -1) {
root = NULL;
}
else {
root = new TreeNode(x);
createTree(root->left);
createTree(root->right);
}
}
//先序遍历
void preOrder(TreeNode* root) {
if (root == NULL) {
return;
}
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
//中序遍历
void inOrder(TreeNode* root) {
if (root == NULL) {
return;
}
inOrder(root->left);
cout << root->val << " ";
inOrder(root->right);
}
//后序遍历
void postOrder(TreeNode* root) {
if (root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
cout << root->val << " ";
}
//层次遍历
void levelOrder(TreeNode* root) {
if (root == NULL) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* temp = q.front();
q.pop();
cout << temp->val << " ";
if (temp->left) {
q.push(temp->left);
}
if (temp->right) {
q.push(temp->right);
}
}
}
int main() {
TreeNode* root;
createTree(root);
cout << "先序遍历:";
preOrder(root);
cout << endl;
cout << "中序遍历:";
inOrder(root);
cout << endl;
cout << "后序遍历:";
postOrder(root);
cout << endl;
cout << "层次遍历:";
levelOrder(root);
cout << endl;
return 0;
}
```
注意:以上代码中采用了递归的方式实现树的遍历,这种方式使用较为简单,但在遇到大规模的树时可能会引起堆栈溢出,因此在实际应用中需要注意树的大小。对于大规模的树,可以采用非递归方式实现遍历。
阅读全文