输入数据并使用easyX绘制二叉树
时间: 2023-06-20 21:08:44 浏览: 389
好的,我可以帮你实现这个功能。首先,需要明确输入数据的格式。假设输入的数据是一个数组,每个元素表示二叉树中的一个节点,其中元素值为节点的值,如果节点为 null,则值为 -1。
例如,输入数据为 [1,2,3,-1,-1,4,5] 表示的二叉树如下:
```
1
/ \
2 3
/ \
4 5
```
下面是使用 easyX 绘制二叉树的代码:
```c++
#include <graphics.h>
#include <vector>
// 定义二叉树节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 将数组转换为二叉树
TreeNode* arrayToTree(const std::vector<int>& nums, int i) {
if (i >= nums.size() || nums[i] == -1)
return nullptr;
TreeNode* root = new TreeNode(nums[i]);
root->left = arrayToTree(nums, 2*i+1);
root->right = arrayToTree(nums, 2*i+2);
return root;
}
// 画二叉树
void drawTree(TreeNode* root, int x, int y, int gap) {
if (!root)
return;
char str[16];
sprintf_s(str, "%d", root->val);
outtextxy(x, y, str);
if (root->left) {
// 画左子树
line(x, y+20, x-gap, y+60);
drawTree(root->left, x-gap, y+60, gap/2);
}
if (root->right) {
// 画右子树
line(x, y+20, x+gap, y+60);
drawTree(root->right, x+gap, y+60, gap/2);
}
}
int main() {
// 初始化 easyX 窗口
initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();
// 输入数据并构造二叉树
std::vector<int> nums = {1,2,3,-1,-1,4,5};
TreeNode* root = arrayToTree(nums, 0);
// 画二叉树
drawTree(root, 400, 100, 200);
// 关闭 easyX 窗口
getch();
closegraph();
return 0;
}
```
运行以上代码,就可以在 easyX 窗口中看到绘制的二叉树了。注意,需要在编译选项中添加 `-lgraphics` 参数来链接 easyX 库。
阅读全文