建立C++代码二叉树,并实现二叉树的遍历,先序遍历采用递归算法实现,层次遍历用非递归算法来实现,可以自己cin输入字母来构成二叉树
时间: 2024-03-10 18:44:07 浏览: 58
好的,我来帮您解答这个问题。
首先,我们需要定义二叉树的节点结构体,包括节点值、左右子节点指针:
```c++
struct Node {
char value; // 节点值
Node* left; // 左子节点指针
Node* right; // 右子节点指针
};
```
然后,我们可以定义一个二叉树类,包括插入节点、先序遍历、层次遍历等方法:
```c++
#include <iostream>
#include <queue>
using namespace std;
struct Node {
char value; // 节点值
Node* left; // 左子节点指针
Node* right; // 右子节点指针
};
class BinaryTree {
public:
BinaryTree(); // 构造函数
~BinaryTree(); // 析构函数
void insert(char value); // 插入节点
void preorderTraversal(); // 先序遍历
void levelTraversal(); // 层次遍历
private:
Node* root; // 根节点指针
void preorderTraversalHelper(Node* node); // 先序遍历辅助函数
};
BinaryTree::BinaryTree() {
root = nullptr;
}
BinaryTree::~BinaryTree() {
// TODO: 析构函数
}
void BinaryTree::insert(char value) {
if (root == nullptr) {
root = new Node{value, nullptr, nullptr};
return;
}
queue<Node*> q;
q.push(root);
while (!q.empty()) {
Node* node = q.front();
q.pop();
if (node->left == nullptr) {
node->left = new Node{value, nullptr, nullptr};
return;
} else {
q.push(node->left);
}
if (node->right == nullptr) {
node->right = new Node{value, nullptr, nullptr};
return;
} else {
q.push(node->right);
}
}
}
void BinaryTree::preorderTraversal() {
preorderTraversalHelper(root);
}
void BinaryTree::levelTraversal() {
if (root == nullptr) {
return;
}
queue<Node*> q;
q.push(root);
while (!q.empty()) {
Node* node = q.front();
q.pop();
cout << node->value << " ";
if (node->left != nullptr) {
q.push(node->left);
}
if (node->right != nullptr) {
q.push(node->right);
}
}
}
void BinaryTree::preorderTraversalHelper(Node* node) {
if (node == nullptr) {
return;
}
cout << node->value << " ";
preorderTraversalHelper(node->left);
preorderTraversalHelper(node->right);
}
int main() {
BinaryTree tree;
// 构建二叉树
int n;
cout << "请输入节点数目:" << endl;
cin >> n;
cout << "请输入节点值:" << endl;
for (int i = 0; i < n; ++i) {
char value;
cin >> value;
tree.insert(value);
}
// 先序遍历
cout << "先序遍历结果为:";
tree.preorderTraversal();
cout << endl;
// 层次遍历
cout << "层次遍历结果为:";
tree.levelTraversal();
cout << endl;
return 0;
}
```
这样,我们就可以通过输入来构建二叉树,并进行先序遍历和层次遍历了。
阅读全文