二叉树基本操作的源代码
时间: 2023-07-06 14:03:21 浏览: 97
以下是二叉树基本操作的源代码,包括创建二叉树、前序遍历、中序遍历、后序遍历和层次遍历。
```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) {}
};
// 创建二叉树
TreeNode* createTree() {
int val;
cin >> val;
if (val == -1) return NULL; // 输入-1表示该节点为空
TreeNode* node = new TreeNode(val);
node->left = createTree(); // 递归构建左子树
node->right = createTree(); // 递归构建右子树
return node;
}
// 前序遍历
void preOrderTraversal(TreeNode* root) {
if (!root) return;
cout << root->val << " ";
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
// 中序遍历
void inOrderTraversal(TreeNode* root) {
if (!root) return;
inOrderTraversal(root->left);
cout << root->val << " ";
inOrderTraversal(root->right);
}
// 后序遍历
void postOrderTraversal(TreeNode* root) {
if (!root) return;
postOrderTraversal(root->left);
postOrderTraversal(root->right);
cout << root->val << " ";
}
// 层次遍历
void levelOrderTraversal(TreeNode* root) {
if (!root) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
int main() {
// 创建二叉树
TreeNode* root = createTree();
// 前序遍历
cout << "前序遍历:";
preOrderTraversal(root);
cout << endl;
// 中序遍历
cout << "中序遍历:";
inOrderTraversal(root);
cout << endl;
// 后序遍历
cout << "后序遍历:";
postOrderTraversal(root);
cout << endl;
// 层次遍历
cout << "层次遍历:";
levelOrderTraversal(root);
cout << endl;
return 0;
}
```
阅读全文