C++ 建立二叉树,并实现二叉树的遍历,先序遍历采用递归算法实现, 层次遍历用非递归算法来实现。
时间: 2024-03-17 15:45:12 浏览: 77
好的,我来回答你的问题。
首先,我们来介绍一下二叉树的定义。二叉树是一种树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。如果一个节点没有子节点,则称为叶子节点。下面我们来看一下 C++ 中如何定义二叉树节点的结构体:
```c++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
这里我们定义了一个名为 TreeNode 的结构体,它包含一个整型成员变量 val,以及两个指向左右子节点的指针 left 和 right。构造函数中初始化 val,并将左右子节点指针置为空。
接下来,我们来实现二叉树的建立。这里我们采用递归算法来实现。具体步骤如下:
1. 如果当前节点为空,创建一个新节点,将值赋给它,然后返回该节点。
2. 如果当前节点不为空,比较当前节点的值和插入值的大小关系:
- 如果插入值小于当前节点的值,递归处理当前节点的左子节点。
- 如果插入值大于当前节点的值,递归处理当前节点的右子节点。
下面是 C++ 中建立二叉树的代码实现:
```c++
TreeNode* insert(TreeNode* root, int val) {
if (root == nullptr) {
root = new TreeNode(val);
return root;
}
if (val < root->val) {
root->left = insert(root->left, val);
} else {
root->right = insert(root->right, val);
}
return root;
}
```
接下来,我们来实现二叉树的先序遍历。先序遍历的顺序是先访问根节点,然后递归遍历左子树,再递归遍历右子树。具体实现代码如下:
```c++
void preorderTraversal(TreeNode* root) {
if (root != nullptr) {
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
```
最后,我们来实现二叉树的层次遍历。层次遍历是按照从上到下、从左到右的顺序遍历每个节点。我们可以使用队列来实现层次遍历,具体实现代码如下:
```c++
void levelTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* cur = q.front();
q.pop();
cout << cur->val << " ";
if (cur->left != nullptr) {
q.push(cur->left);
}
if (cur->right != nullptr) {
q.push(cur->right);
}
}
}
```
以上就是 C++ 中建立二叉树,并实现二叉树的先序遍历和层次遍历的代码实现。希望能帮助到你!
阅读全文