层序遍历二叉树可视化easyx代码
时间: 2023-06-24 07:03:06 浏览: 143
层序遍历二叉树
4星 · 用户满意度95%
层序遍历二叉树可视化代码示例如下(使用 easyx 图形库):
```cpp
#include <graphics.h>
#include <queue>
#include <iostream>
using namespace std;
const int N = 100; // 二叉树节点数量上限
struct Node {
int x, y; // 坐标
int val; // 节点值
};
Node nodes[N]; // 节点信息
int n; // 节点数量
void levelOrderTraverse(int root) {
queue<int> q;
q.push(root);
int x = 50, y = 50; // 起始坐标
int dx = 70, dy = 50; // 偏移量
while (!q.empty()) {
int u = q.front();
q.pop();
// 绘制节点
int x1 = nodes[u].x, y1 = nodes[u].y;
int x2 = x1 + 50, y2 = y1 + 30;
rectangled(x1, y1, x2, y2);
outtextxy(x1 + 15, y1 + 10, to_string(nodes[u].val).c_str());
// 绘制边
int l = u * 2, r = u * 2 + 1;
if (l <= n) {
line(x1 + 25, y1 + 30, nodes[l].x + 25, nodes[l].y);
q.push(l);
}
if (r <= n) {
line(x1 + 25, y1 + 30, nodes[r].x + 25, nodes[r].y);
q.push(r);
}
// 调整坐标
x += dx;
if (x >= 800) {
x = 50;
y += dy;
}
nodes[u].x = x;
nodes[u].y = y;
}
}
int main() {
// 初始化
initgraph(800, 600);
// 读入节点数量
cout << "请输入节点数量:";
cin >> n;
// 读入节点信息
for (int i = 1; i <= n; i++) {
cout << "请输入节点 " << i << " 的值:";
cin >> nodes[i].val;
}
// 层序遍历并绘制
levelOrderTraverse(1);
阅读全文