打印出正整数的二叉树(直观)

时间:2014-03-26 19:21:43

标签: algorithm tree

我试图创建一个打印出二进制树对象的算法,该对象表示0到127范围内的整数。

示例

如果树中唯一的元素是0,则打印出来:

 /
0

示例。

如果树中的唯一元素是0和1,则打印:

 /\
0  1

示例

如果树中唯一的元素是0,1和2,则打印出来:

   /    \
  0      1
 / \   
0   1 

示例

如果树中的元素是0,1,...,8,则打印:

      /         \
     0           1
   /   \       /   \
  0     1     0     1
 / \   / \   / \   / \
0   1 0   1 0   1 0   1 

诸如此类!

首先,

  • 有人能想到一个算法来打印0到127的整个数字树吗?
  • 如果给定树的最大数字具有n个有效位(以及节点),则树的底部将占用多少个字符,包括底行右侧的填充?这是我需要弄清楚的事情,因为我现在正在尝试制作一个HTML表格,每个单元格有1个字符,并且能够保存树的所有字符。
  • 你认为我打算在树上打印的是自杀吗?由于我试图将其合并到一个网站中,我是否应该开始熟悉JavaScript图形包并找到另一种从用户输入整数中绘制树的方法?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是对绘图的尝试(Python 2/3)。

def go (n, k):
    m = (1 << (n + 1)) - 1
    s = " " * m + " /" + " " * (2 * m - 1) + "\\ " + " " * m
    print (" ".join ([s] * k))
    t = " " * m + "0 " + " " * (2 * m - 1) + " 1"  + " " * m
    print (" ".join ([t] * k))
    if n > 0:
        go (n - 1, k << 1)

go (0, 1)
go (1, 1)
go (2, 1)
go (3, 1)

树木是:

对于0..1:

  / \  
 0   1 

对于0..3:

    /     \    
   0       1   
  / \     / \  
 0   1   0   1 

对于0..7:

        /             \        
       0               1       
    /     \         /     \    
   0       1       0       1   
  / \     / \     / \     / \  
 0   1   0   1   0   1   0   1 

0..15:

                /                             \                
               0                               1               
        /             \                 /             \        
       0               1               0               1       
    /     \         /     \         /     \         /     \    
   0       1       0       1       0       1       0       1   
  / \     / \     / \     / \     / \     / \     / \     / \  
 0   1   0   1   0   1   0   1   0   1   0   1   0   1   0   1 

请注意,每行数字均匀分布,因此宽度比草图宽。

对于数字0..127,并且在最后一行上每个数字有128位和4个字符,其宽度为512个字符,最后可能减去几个空格。我怀疑512柱表是一件好事,所以也许这对你的问题来说不是一个很好的解决方案。不过,它显示了你将获得的估计值。