树状显示二叉树
来源:互联网 发布:ftp连接阿里云 编辑:程序博客网 时间:2024/05/21 11:19
二叉树一个重要的数据结构,如何方便直观的显示一棵树对于学习非常重要。
现设计了如下算法:
编写函数displaytree(二叉树的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的二叉树是垂直打印的,同层的节点在同一行上。
问题描述:
假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=2^6,假设节点的输出位置用(层号,须打印的空格数)来界定。
第0层:根在(0,32)处输出;
第1层:因为根节点缩进了32个空格,所以下一层的偏移量(offset)为32/2 = 16 = screenwidth/2^2。即第一层的两个节点的位置(1,32-offset),(1,32+offset) 即(1,16),(1,48)。
第2层:第二层的偏移量offset为screenwidth/23。第二层的四个节点的位置分别是(2,16-offset),(2,16+offset),(2,48-offset),(2,48+offset)即(2,8),(2,24),(2,40),(2,56)。……
第i层: 第i层的偏移量offset为screenwidth/2i+1。第i层的每个节点的位置是访问第i-1层其双亲节点时确定的。假设其双亲的位置为(i- 1,parentpos)。若其第i层的节点是其左孩子,那末左孩子的位置是(i,parentpos-offset),右孩子的位置是(i,parentpos+offset)。
利用二叉树的层次遍历算法实现。利用两个队列Q,QI。
队列Q中存放节点信息。
队列QI中存相应于队列Q中的节点的位置信息,包括层号、位置,是否换行、需要打印的空格数。
当节点被加入到Q时,根据前一个节点的信息来计算当期的打印信息,并且将相应的打印信息被存到QI中。
程序如下:
需要注意的是:如果将插入的结点和队尾的结点的level不同,说明需要换行
采用队列的方式是为了实现广度优先遍历:从根结点开始,一层一层的将结点加入到队列中。
遍历的过程也是显示的过程
结果如下
- 树状显示二叉树
- 按树状打印二叉树
- 二叉搜索树(树状数组)
- 树状形式打印二叉树
- 二叉索引树 树状数组 收藏
- 二叉索引树(树状数组)
- 树状数组(二叉索引树)
- java树状结构之二叉树
- 用二叉树来理解树状数组
- 二叉索引树(树状数组)
- 二叉索引树——树状数组
- 二叉索引树(树状数组)
- 二叉索引树(树状数组)
- BIT二叉索引树(树状数组)
- [树状数组][二叉索引树]lowbit表
- 二叉索引树(树状数组)
- 树状数组(二叉索引树)
- 格式化显示二叉树
- Android面试应该详细掌握的内容
- 关于ubuntu的apt-get和安装目录
- 编写存储过程常用技巧汇总
- 程序的装入和链接
- Web容器的编码问题
- 树状显示二叉树
- Web容器的编码问题
- C++继承学习笔记
- Web容器的编码问题
- visual studio 2008下装CGAL
- visual studio 2008下装CGAL
- 索引中丢失in或out参数:1
- 嵌入式Linux系统中使用cramfs文件系统
- 字节数字和十六进制的转化