用C++建立二叉树可运行代码,并实现二叉树的遍历,先序遍历采用递归算法实现,层次遍历用非递归算法来实现。每一句代码都需要详细解释
时间: 2024-03-09 09:49:10 浏览: 63
好的,下面是用 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) {}
};
// 插入节点
TreeNode* insert(TreeNode *root, int val) {
if (root == NULL) { // 如果当前节点为空,则创建一个新的节点,并返回
return new TreeNode(val);
}
if (val < root->val) { // 如果插入的值小于当前节点的值,则插入到左子树中
root->left = insert(root->left, val);
}
else { // 否则插入到右子树中
root->right = insert(root->right, val);
}
return root;
}
// 先序遍历(递归实现)
void preorder(TreeNode *root) {
if (root == NULL) { // 如果当前节点为空,则返回
return;
}
cout << root->val << " "; // 先访问根节点
preorder(root->left); // 然后访问左子树
preorder(root->right); // 最后访问右子树
}
// 层次遍历(非递归实现)
void levelorder(TreeNode *root) {
if (root == NULL) { // 如果当前节点为空,则返回
return;
}
queue<TreeNode*> q;
q.push(root); // 将根节点入队
while (!q.empty()) {
TreeNode *node = q.front(); // 取出队首节点
q.pop();
cout << node->val << " "; // 访问该节点
if (node->left != NULL) { // 如果左子节点不为空,则将左子节点入队
q.push(node->left);
}
if (node->right != NULL) { // 如果右子节点不为空,则将右子节点入队
q.push(node->right);
}
}
}
int main() {
TreeNode *root = NULL;
root = insert(root, 5);
insert(root, 3);
insert(root, 7);
insert(root, 1);
insert(root, 4);
insert(root, 6);
insert(root, 8);
cout << "先序遍历结果:";
preorder(root);
cout << endl;
cout << "层次遍历结果:";
levelorder(root);
cout << endl;
return 0;
}
```
代码中,我们先定义了一个 `TreeNode` 结构体,然后实现了二叉树的插入函数 `insert`,接着实现了先序遍历和层次遍历两个函数 `preorder` 和 `levelorder`。最后在 `main` 函数中创建了一个二叉树,并分别进行了先序遍历和层次遍历。
希望这个例子对您有帮助!
阅读全文