建立一个二叉树,并实现二叉树的遍历,先序遍历采用递归算法实现,层次遍历用非递归算法来实现 C++
时间: 2024-03-09 20:49:01 浏览: 74
好的,我会尽力回答你的问题。
首先,我们来看一下建立二叉树的代码:
```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 createTree(TreeNode*& root) {
int val;
cin >> val;
if (val == -1) { // 输入 -1 表示该节点为空
root = NULL;
} else {
root = new TreeNode(val);
createTree(root->left);
createTree(root->right);
}
}
```
这里我们采用递归的方式来建立二叉树,输入 -1 表示该节点为空。
接下来,我们来看一下先序遍历的递归实现:
```c++
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
先输出当前节点的值,然后递归遍历左子树和右子树。
最后,我们来看一下层次遍历的非递归实现:
```c++
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* cur = q.front();
q.pop();
cout << cur->val << " ";
if (cur->left != NULL) {
q.push(cur->left);
}
if (cur->right != NULL) {
q.push(cur->right);
}
}
}
```
用一个队列来存储每一层的节点,先输出队头节点的值,再将其左右子节点入队,直到队列为空。
以上就是建立二叉树并实现二叉树遍历的代码,希望能够帮到你。
阅读全文