用C++建立二叉树,并实现二叉树的遍历,先序遍历采用递归算法实现,层次遍历用非递归算法来实现。 二叉树可以自己输入
时间: 2024-03-09 10:50:03 浏览: 73
数据结构二叉树实验(C++).docx
5星 · 资源好评率100%
好的,这是一个关于二叉树的问题。我会尽力回答你的问题。
首先,我们需要了解二叉树的概念。二叉树是一种树形结构,它的每个节点最多有两个子节点。一个节点的左子树包含比该节点小的所有节点,右子树包含比该节点大的所有节点。二叉树可以用递归的方式定义。定义一个节点类型,包含三个成员:节点值,左子树,右子树。
```C++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
接下来,我们可以用递归的方式实现二叉树的先序遍历。先序遍历的顺序是先访问根节点,然后访问左子树,最后访问右子树。递归实现先序遍历的代码如下:
```C++
void preorderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
层次遍历可以用队列来实现。从根节点开始,将其加入队列。然后,每次从队列中取出一个节点,访问该节点,并将其左右子节点加入队列。重复这个过程直到队列为空。非递归实现层次遍历的代码如下:
```C++
void levelOrderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left != nullptr) {
q.push(node->left);
}
if (node->right != nullptr) {
q.push(node->right);
}
}
}
```
最后,我们可以编写一个主函数来测试我们的代码。主函数可以从标准输入读取二叉树的节点值,构建二叉树,然后调用遍历函数。
```C++
int main() {
TreeNode* root = nullptr;
int val;
while (cin >> val) {
root = insert(root, val);
}
cout << "Preorder traversal: ";
preorderTraversal(root);
cout << endl;
cout << "Level order traversal: ";
levelOrderTraversal(root);
cout << endl;
return 0;
}
```
这样,我们就完成了用C++建立二叉树,并实现二叉树的遍历,先序遍历采用递归算法实现,层次遍历用非递归算法来实现的问题。
阅读全文