按层序遍历顺序生成二叉树

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define Yes 1
#define No 0
typedef short ElemType;
typedef short Status;
struct BiTreeNode/* 二叉树结点定义 */
{
    ElemType data;
    struct BiTreeNode *LChild;/* 左孩子指针 */
    struct BiTreeNode *RChild;/* 右孩子指针 */
};
struct QueueNode/* 链队列结点 */
{
    struct BiTreeNode *pointer;/* 存储二叉树的根结点地址 */
    struct QueueNode *next;
};
struct QueueInfo/* 链队列信息结点 */
{
    QueueNode *Qfront;/* 队头指针 */
    QueueNode *Qrear;/* 队尾指针 */
};
/* */
Status InitQueue(QueueInfo* &Q_Info);
Status EnQueue(QueueInfo* &Q_Info, BiTreeNode *T);
Status DeQueue(QueueInfo* &Q_Info, BiTreeNode* &T);
Status QueueEmpty(QueueInfo* &Q_Info);
short GetQueueLength(QueueInfo* &Q_Info);
BiTreeNode* GetQueueTop(struct QueueInfo* &Q_Info);
short DepthNotRecursion(BiTreeNode* &T);
int GetSumTheDeepestLevel(BiTreeNode* &T, short depth);
Status CreateBiTreeLevelTraverse(BiTreeNode* &T);
Status LevelTraverse(BiTreeNode* &T);
/* */
int main()
{
    BiTreeNode *root;/* 树根指针 */
    BiTreeNode *copy_root;/* 二叉树复制品的根指针 */
    CreateBiTreeLevelTraverse(root);
    LevelTraverse(root);
    return 0;
}
/* 按层序遍历顺序创建二叉树 */
Status CreateBiTreeLevelTraverse(BiTreeNode* &T)
{
    ElemType ch;
    struct QueueInfo *Q_Info;
    struct BiTreeNode *p;
    InitQueue(Q_Info);
    fscanf(stdin, "%hd", &ch);
    if(ch != 0)
    {
        T = (struct BiTreeNode*)malloc(sizeof(struct BiTreeNode));
        if(T == NULL)
        {
            exit(0);
        }
        T -> da
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用 easyx 库中的 `drawtree` 函数来遍历图形化二叉树。这个函数的第一个参数是一个指向二叉树根节点的指针,第二个参数是一个回调函数,它负责绘制每个节点。你需要在回调函数中实现如何绘制每个节点,然后调用 `drawtree` 函数来遍历整棵二叉树并绘制所有节点。 示例代码如下: ```cpp #include <easyx.h> #include <cstdio> // 定义二叉树节点结构体 struct Node { int val; Node* left; Node* right; }; // 定义回调函数,绘制每个节点 void draw_node(Node* node, int x, int y, int h) { char text[32]; sprintf(text, "%d", node->val); outtextxy(x, y, text); } int main() { // 初始化绘图窗口 initgraph(640, 480); // 创建二叉树根节点 Node root; root.val = 1; root.left = nullptr; root.right = nullptr; // 调用 drawtree 函数遍历图形化二叉树 drawtree(&root, draw_node); // 等待用户关闭窗口 closegraph(); return 0; } ``` 在这个例子中,我们创建了一棵只有根节点的二叉树,并使用 `drawtree` 函数遍历这棵二叉树。在回调函数 `draw_node` 中,我们使用 `outtextxy` 函数在给定的坐标处绘制每个节点的值。 ### 回答2: EasyX是一个基于C/C++的图形库,可以用来实现图形化的二叉树层序遍历是一种二叉树遍历方法,在层序遍历中,我们按照树的层次顺序依次访问每个节点。 实现二叉树的图形化层序遍历,可以按照以下步骤进行: 1. 安装EasyX库并包含相关的头文件。 2. 创建一个窗口来显示图形化的二叉树。 3. 定义一个二叉树的节点结构,包括节点的值和指向左右子节点的指针。 4. 创建一个二叉树,可以手动输入节点的值或者随机生成节点的值。 5. 通过层序遍历的方法,将二叉树的节点按层次依次访问并绘制在窗口上。 具体实现过程如下: 1. 首先,定义一个Queue队列来辅助层序遍历。Queue队列可以包含二叉树的节点指针。 2. 将二叉树的根节点指针加入到Queue队列中。 3. 在一个循环中,不断从Queue队列中取出节点指针,并依次访问这些节点。 4. 对于每个节点,首先绘制该节点在指定位置的图形(可以是一个圆或者长方形),然后根据节点的位置和宽度,在图形上绘制节点的值。 5. 判断当前节点是否有左子节点,如果有,则将左子节点指针加入到Queue队列中。 6. 判断当前节点是否有右子节点,如果有,则将右子节点指针加入到Queue队列中。 7. 继续循环直到Queue队列为空。 通过以上步骤,我们可以将二叉树按照层次图形化地展示出来。在展示过程中,我们可以调整图形的位置和大小,使其更美观。另外,在每个节点的图形上绘制节点的值,可以让我们更清晰地了解二叉树的结构。 ### 回答3: EasyX是一个简单易用的C语言图形库,可以实现图形化的二叉树层序遍历。 要使用EasyX图形化二叉树层序遍历,首先需要在代码中引入EasyX图形库的头文件。 ```c #include <graphics.h> ``` 接下来,需要初始化图形界面,并创建一个窗口来显示二叉树。 ```c initgraph(800, 600); // 初始化图形界面 ``` 然后,可以定义二叉树的节点结构。每个节点包括数据域和左右子树指针。 ```c struct Node { int data; struct Node* left; struct Node* right; }; ``` 接着,可以编写一个函数来按层序遍历二叉树,并在图形界面上绘制节点。 ```c void drawBinaryTree(Node* root, int x, int y, int level) { if (root == NULL) { return; } // 绘制当前节点 char dataStr[10]; sprintf(dataStr, "%d", root->data); settextstyle(20, 0, "Arial"); outtextxy(x, y, dataStr); // 计算左右子节点的坐标 int leftX = x - 100 / pow(2, level); int rightX = x + 100 / pow(2, level); int childY = y + 50; // 绘制左子节点连接线并递归绘制左子树 if (root->left != NULL) { line(x, y + 15, leftX, childY - 15); drawBinaryTree(root->left, leftX, childY, level + 1); } // 绘制右子节点连接线并递归绘制右子树 if (root->right != NULL) { line(x, y + 15, rightX, childY - 15); drawBinaryTree(root->right, rightX, childY, level + 1); } } ``` 最后,可以在主函数中构建一个二叉树,并调用绘制函数来显示二叉树。 ```c int main() { // 构建二叉树 Node* root = new Node(); root->data = 1; root->left = new Node(); root->left->data = 2; root->right = new Node(); root->right->data = 3; root->left->left = new Node(); root->left->left->data = 4; root->left->right = new Node(); root->left->right->data = 5; // 绘制二叉树 drawBinaryTree(root, 400, 100, 1); getch(); closegraph(); // 关闭图形界面 return 0; } ``` 以上代码使用EasyX图形库实现了二叉树层序遍历,并在图形界面上绘制出了二叉树的形态。可以根据实际需求更改代码中的二叉树结构和绘制样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好梦成真Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值