用Flex画横向二叉树

 

用 Flex 整理了一个横向二叉树的需求,形状就如上图所示

是一个二叉树的结构,可怎么画出来却费了很多脑筋

最后确认的思路就是:从右往左,从上到下顺序遍历节点,然后由全局的变量保持横向节点的x坐标,和纵向节点的y坐标

首先遍历右节点,存在右节点的子右节点则进栈,不存在子右节点的话 将当前节点出栈,

遍历刚出栈的节点的左节点,在其中继续遍历右节点,如此反复,终于画了出来。

 

注:先出栈在遍历其左节点!

 

核心代码如下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyX是一个轻量级的C++图形库,主要用于Windows平台的窗口系统编程,包括绘制各种图形和界面元素。如果你想用EasyX来二叉树,首先你需要了解二叉树的结构,通常每个节点包含一个值和两个子节点(左子节点和右子节点)。在EasyX中,你可以使用矩形、线条等基本图形来模拟节点和边。 以下是一个简单的步骤: 1. **创建节点类**:定义一个二叉树节点类,包含值、左右子节点指针和表示节点的矩形或图标。 ```cpp class TreeNode { public: int value; TreeNode* left, *right; // EasyX中的图形表示 Bitmap nodeBitmap; // 其他必要的方法(如初始化、插入子节点等) }; ``` 2. **绘制节点**:为每个节点创建一个矩形或使用自定义的图标,并在适当的位置显示。 ```cpp void drawTreeNode(TreeNode* node, int x, int y) { nodeBitmap.Draw(x, y); // 如果有子节点,递归绘制它们 if (node->left) drawTreeNode(node->left, x + 10, y + 20); if (node->right) drawTreeNode(node->right, x + 30, y + 20); } ``` 3. **根节点绘制**:从根节点开始绘制整个二叉树。 ```cpp void drawBinaryTree(TreeNode* root) { drawTreeNode(root, 100, 100); // 根据窗口位置调整坐标 } ``` 4. **事件处理**:在窗口的事件循环中调用`drawBinaryTree`函数,确保每次窗口大小改变或重绘时,二叉树能正确更新。 5. **维护和遍历**:除了绘制,还需要实现其他方法如插入、删除节点,以及遍历二叉树(前序、中序、后序)来动态改变树的结构。 **相关问题**: 1. EasyX支持哪些图形操作? 2. 如何在EasyX中实现节点的添加和删除? 3. 二叉树的遍历方式有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值