2014-03-26 58 views
0

我试图创建输出的二进制树的对象,通过127打印出来的正整数的二进制树(目视)

实施例表示在范围0的整数的算法。

如果在树的唯一元件是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 

诸如此类!

对于初学者来说,

  • 谁能想到一个算法通过127打印数字0的整个树?
  • 如果给定树的最大数字有n个有效位(从而节点),树的底部会占用多少个字符,包括底部行右边的填充?这是我需要弄清楚的,因为现在我试图制作一个HTML表格,每个单元格有1个字符,并且能够保存树的所有字符。
  • 你认为我想要做什么,打印树,是自杀吗?由于我正在尝试将这些内容加入到网站中,我是否应该开始熟悉JavaScript图形包,并找到从用户输入整数中绘制树的替代方法?有任何想法吗?
+0

您显示的数据结构看起来更像是一个基2树,也称为基数树或前缀树。 – delnan

+1

你有没有尝试过任何东西?你对如何去做这件事有什么想法? –

回答

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 

For 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列的表是否是一件好事,因此这可能不是您的问题的解决方案。不过,它显示了你会得到的估计。