二叉树的建立与遍历完整代码
时间: 2023-08-05 11:46:53 浏览: 116
二叉树的建立及先、中、后和层次遍历.tx
5星 · 资源好评率100%
以下是 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 levelOrder(TreeNode* root) {
if (root == NULL) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
cout << endl;
}
}
// 前序遍历二叉树
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 << " ";
}
// 递归构建二叉树
TreeNode* buildTree(vector<int>& nums, int left, int right) {
if (left > right) return NULL;
int mid = (left + right) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = buildTree(nums, left, mid - 1);
root->right = buildTree(nums, mid + 1, right);
return root;
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5, 6, 7};
TreeNode* root = buildTree(nums, 0, nums.size() - 1);
cout << "层序遍历:\n";
levelOrder(root);
cout << "前序遍历:\n";
preOrder(root);
cout << endl;
cout << "中序遍历:\n";
inOrder(root);
cout << endl;
cout << "后序遍历:\n";
postOrder(root);
cout << endl;
return 0;
}
```
上述代码中,我们定义了一个 `TreeNode` 结构体来表示二叉树结点,包括结点值 `val`,左右子结点指针 `left` 和 `right`。然后定义了四个遍历函数,分别是层序遍历 `levelOrder`,前序遍历 `preOrder`,中序遍历 `inOrder` 和后序遍历 `postOrder`。其中层序遍历使用队列实现,其他三种遍历使用递归实现。
在 `main` 函数中,我们以一个有序数组为例,使用递归方式构建一棵平衡二叉树,并依次输出四种遍历结果。
阅读全文