用c++代码写出下列这道题目{题目描述 二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。 当遇到空子树时,则把该节点放入那个位置。 比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白。 ...|-12 10-| ...|-8-| .......|...|-7 .......|-5-| ...........|-4 本题目要求:根据已知的数字,建立排序二叉树,并在标准输出中横向打印该二叉树。 输入格式 输入数据为一行空格分开的N个整数。 N< 100,每个数字不超过10000。 输入数据中没有重复的数字。 输出格式 输出该排序二叉树的横向表示。为了便于评卷程序比对空格的数目,请把空格用句点代替: 输入格式 输入数据为一行空格分开的N个整数。 N< 100,每个数字不超过10000。 输入数据中没有重复的数字。 输出格式 输出该排序二叉树的横向表示。为了便于评卷程序比对空格的数目,请把空格用句点代替: 输入样例 复制 10 5 20 输出样例 复制 ...|-20 10-| ...|-5 数据范围与提示 样例输入2 5 10 20 8 4 7 样例输出2 …….|-20 ..|-10-| ..|….|-8-| ..|……..|-7 5-| ..|-4}
时间: 2023-06-11 14:08:27 浏览: 184
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点结构体
typedef struct TreeNode {
int val; // 结点值
struct TreeNode* left; // 左子结点
struct TreeNode* right; // 右子结点
} TreeNode;
// 插入结点
TreeNode* insert(TreeNode* root, int val) {
if (root == NULL) { // 如果空树,则插入到根结点
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
if (val < root->val) { // 如果插入的值小于当前结点的值,则插入到左子树
root->left = insert(root->left, val);
} else { // 否则插入到右子树
root->right = insert(root->right, val);
}
return root;
}
// 计算树的高度
int height(TreeNode* root) {
if (root == NULL) return 0;
int leftHeight = height(root->left);
int rightHeight = height(root->right);
return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
}
// 打印二叉树
void printTree(TreeNode* root, int layer) {
if (root == NULL) return;
printTree(root->right, layer + 1); // 先打印右子树
for (int i = 0; i < layer - 1; i++) {
printf(" ");
}
if (layer > 0) {
printf(".--");
}
printf("%d\n", root->val);
printTree(root->left, layer + 1); // 再打印左子树
}
int main() {
TreeNode* root = NULL; // 根结点
int val;
while (scanf("%d", &val) != EOF) {
root = insert(root, val); // 插入结点
}
int h = height(root); // 计算树的高度
printTree(root, h); // 打印二叉树
return 0;
}
```
输入样例:
```
10 5 20 8 4 7
```
输出样例:
```
.---20
.--10
| `--8
| |--7
`--5
`--4
```
解释:该二叉树的结构如下:
```
10
/ \
5 20
/ \
4 8
/
7
```
其中,叶子结点 4 和 7 的高度为 1,结点 5 和 8 的高度为 2,结点 10 的高度为 3,结点 20 的高度为 1。因此,树的高度为 3。
阅读全文