完成二叉树二叉链表结构的定义 ,实现二叉链表创建二叉树(尝试用递归算法实现),并实现先序、中序和后序遍历算法。实现二叉树求结点个数,求树的高度,求叶子结点数、交换二叉树左右子树的算法。
时间: 2023-06-08 18:08:53 浏览: 177
链表先序建立二叉树,得到中序后序输出,递归和非递归实现(C++代码加设计报告)
5星 · 资源好评率100%
好的,让我来回答您的问题。首先,二叉树可以用链表结构来定义。每个节点包含三个元素:该节点的值、指向左子树的指针和指向右子树的指针。因此,二叉链表结构的定义如下:
```c++
struct Node {
int val; // 节点的值
Node* left; // 左子树指针
Node* right; // 右子树指针
};
```
接下来,我们可以使用递归算法来创建一棵二叉树。假设我们已经定义了一个函数 `buildTree()` ,那么它的实现应该如下:
```c++
Node* buildTree() {
int val;
cin >> val; // 输入当前节点的值
if (val == -1) {
return nullptr; // 如果当前节点的值为-1,表示该节点为空,返回 nullptr
}
Node* root = new Node(); // 创建一个新节点
root->val = val;
root->left = buildTree(); // 递归创建左子树
root->right = buildTree(); // 递归创建右子树
return root;
}
```
接下来,我们可以实现先序遍历、中序遍历和后序遍历算法。假设我们已经定义了一个函数 `preorder()` 来进行先序遍历,那么它的实现应该如下:
```c++
void preorder(Node* root) {
if (root == nullptr) {
return; // 如果当前节点为空,直接返回
}
cout << root->val << " "; // 先访问当前节点
preorder(root->left); // 递归访问左子树
preorder(root->right); // 递归访问右子树
}
```
中序遍历和后序遍历的算法类似,只需要改变访问当前节点的顺序即可。
接下来,我们可以实现求结点个数、求树的高度、求叶子结点数和交换二叉树左右子树的算法。假设我们已经定义了一个函数 `countNodes()` 来求节点个数,那么它的实现应该如下:
```c++
int countNodes(Node* root) {
if (root == nullptr) {
return 0; // 如果当前节点为空,节点个数为 0
}
return 1 + countNodes(root->left) + countNodes(root->right); // 节点个数为左子树节点个数+右子树节点个数+1
}
```
求树的高度、求叶子结点数和交换二叉树左右子树的算法的实现可以参考以下代码:
```c++
int getHeight(Node* root) {
if (root == nullptr) {
return 0; // 如果当前节点为空,高度为 0
}
int leftHeight = getHeight(root->left); // 求左子树高度
int rightHeight = getHeight(root->right); // 求右子树高度
return max(leftHeight, rightHeight) + 1; // 树的高度为左右子树高度的最大值+1
}
int countLeaves(Node* root) {
if (root == nullptr) {
return 0; // 如果当前节点为空,叶子结点个数为 0
}
if (root->left == nullptr && root->right == nullptr) {
return 1; // 如果当前节点是叶子结点,叶子结点个数为 1
}
return countLeaves(root->left) + countLeaves(root->right); // 叶子结点个数为左子树叶子结点个数+右子树叶子结点个数
}
void swapChildren(Node* root) {
if (root == nullptr) {
return; // 如果当前节点为空,直接返回
}
swap(root->left, root->right); // 交换左右子树指针
swapChildren(root->left); // 递归交换左子树的子树
swapChildren(root->right); // 递归交换右子树的子树
}
```
好了,以上就是我给您的答案,希望能对您有所帮助。
阅读全文