C++建立二叉树,并实现二叉树的遍历,先序遍历采用递归算法实现, 层次遍历用非递归算法来实现。
时间: 2024-03-17 10:45:21 浏览: 75
好的,我来回答你的问题。
首先,我们需要定义二叉树的结构体:
```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) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
}
}
```
最后,我们来看一下如何建立二叉树。这里我提供一个简单的方法,即用一个数组来表示二叉树的形态,然后按照顺序将每个节点插入到二叉树中:
```c++
TreeNode* buildTree(vector<int>& nums) {
if (nums.empty()) {
return nullptr;
}
queue<TreeNode*> q;
TreeNode* root = new TreeNode(nums[0]);
q.push(root);
int i = 1;
while (i < nums.size()) {
TreeNode* node = q.front();
q.pop();
if (i < nums.size() && nums[i] != -1) {
node->left = new TreeNode(nums[i]);
q.push(node->left);
}
i++;
if (i < nums.size() && nums[i] != -1) {
node->right = new TreeNode(nums[i]);
q.push(node->right);
}
i++;
}
return root;
}
```
其中,数组中的-1表示该节点为空。
完整代码如下:
阅读全文