C++实现(一)完成二叉树二叉链表结构的定义 (二)实现二叉链表的创建,先序、中序和后序遍历算法的实现。 (三)实现二叉树求结点个数,求高度,求叶子结点数、交换二叉树左右子树的算法
时间: 2024-12-11 19:43:09 浏览: 30
链表先序建立二叉树,得到中序后序输出,递归和非递归实现(C++代码加设计报告)
5星 · 资源好评率100%
在C++中,我们可以首先定义一个简单的二叉链表节点结构来表示二叉树:
```cpp
// 定义二叉链表节点
struct TreeNode {
int val; // 节点值
TreeNode* left; // 左子节点指针
TreeNode* right; // 右子节点指针
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} // 构造函数
};
```
接下来,我们分别实现二叉链表的创建和遍历算法:
(一)创建二叉链表:
你可以通过递归或迭代的方式创建二叉树。这里给出一个基本的插入操作的例子:
```cpp
TreeNode* createBinaryTree(int arr[], int start, int end) {
if (start > end)
return nullptr;
TreeNode* root = new TreeNode(arr[start]);
int mid = (start + end) / 2;
root->left = createBinaryTree(arr, start, mid - 1);
root->right = createBinaryTree(arr, mid + 1, end);
return root;
}
```
(二)遍历二叉树:
1. 先序遍历(根-左-右):
```cpp
void preOrder(TreeNode* node) {
if (node != nullptr) {
cout << node->val << " ";
preOrder(node->left);
preOrder(node->right);
}
}
```
2. 中序遍历(左-根-右):
```cpp
void inOrder(TreeNode* node) {
if (node != nullptr) {
inOrder(node->left);
cout << node->val << " ";
inOrder(node->right);
}
}
```
3. 后序遍历(左-右-根):
```cpp
void postOrder(TreeNode* node) {
if (node != nullptr) {
postOrder(node->left);
postOrder(node->right);
cout << node->val << " ";
}
}
```
(三)其他算法实现:
1. 求结点个数:
```cpp
int countNodes(TreeNode* node) {
if (node == nullptr)
return 0;
else
return 1 + countNodes(node->left) + countNodes(node->right);
}
```
2. 求高度:
```cpp
int height(TreeNode* node) {
if (node == nullptr)
return 0;
else
return 1 + max(height(node->left), height(node->right));
}
```
3. 求叶子结点数:
```cpp
int leafCount(TreeNode* node) {
if (node == nullptr || (node->left == nullptr && node->right == nullptr))
return 1;
else
return 0;
}
```
4. 交换二叉树左右子树:
```cpp
void swapChildren(TreeNode* &node) {
if (node != nullptr) {
swap(node->left, node->right);
}
}
```
阅读全文