Tag: 二叉树

在Ruby中实现二叉树

我一直在尝试在Ruby中实现BinaryTree类,但是我得到了stack level too deep错误,尽管我似乎没有在该特定代码段中使用任何递归: 1. class BinaryTree 2. include Enumerable 3. 4. attr_accessor :value 5. 6. def initialize( value = nil ) 7. @value = value 8. @left = BinaryTree.new # stack level too deep here 9. @right = BinaryTree.new # and here 10. end 11. 12. def empty? 13. ( self.value == nil ) […]

以文本/ ASCIIforms渲染水平二进制树的算法

这是一个非常普通的二叉树,除了其中一个节点可能是空的。 我想找到一种以水平方式输出它的方法(也就是说,根节点在左边并向右扩展)。 我有一些垂直扩展树木的经验(根节点在顶部,向下扩展),但在这种情况下,我不知道从哪里开始。 最好是遵循以下几条规则: 如果一个节点只有一个子节点,则可以将其作为冗余跳过(始终显示“终端节点”,没有子节点) 相同深度的所有节点必须垂直对齐; 所有节点必须位于所有较低深度节点的右侧,并且位于所有较深节点的左侧。 节点具有包含其深度的字符串表示。 每个“端节点”都有自己独特的线路; 也就是说,行数是树中终端节点的数量,当终端节点在一条线上时,在该终端节点之后该行上可能没有其他内容。 作为最后一条规则的结果,根节点在左上角或左下角可能会更好; 左上角是首选。 例如,这是一个有效的树,有六个端节点(节点由一个名称及其深度表示): 编辑:请参阅问题的底部以获得替代,更容易渲染 [A0] ———– [B3] —— [C5] —— [D8] \ —- \ ——- [e9] —- [f5] \ – [G1] ——– [H4] —— [I6] \ ——————– [j10] \ – [K3] 它代表垂直的显式二叉树: 0 a / \ 1克* / \ \ 2 * * * / […]