【问题标题】:Ruby GraphViz Binary Tree RecordRuby GraphViz 二叉树记录
【发布时间】:2010-05-31 02:56:16
【问题描述】:

我正在使用ruby-graphviz gem,我正在尝试绘制二叉树。我想使用record shape,这样每个节点都可以有一个左、中、右字段,因此,如果有两条边离开一个节点,则可以区分左右边。

我尝试通过连接字段名称来指定字段,如下所示:@node1.name + ":left" 但这不起作用。指定字段的正确方法是什么?

require 'rubygems'
require 'graphviz'

@graph = GraphViz.new( :G, :type => :digraph )

@node1 = @graph.add_node("1", 
  "shape" => "record", 
  "label" => "<left>|<f1> 1|<right>" )

@node2 = @graph.add_node("2", 
  "shape" => "record", 
  "label" => "<left>|<f1> 2|<right>" )

@graph.add_edge(@node1.name + ":left", @node2)

# generate a random filename
filename = "/tmp/#{(0...8).map{65.+(rand(25)).chr}.join}.png"
@graph.output( :png => filename )
exec "open #{filename}"

【问题讨论】:

    标签: ruby binary-tree graphviz


    【解决方案1】:

    在 GraphViz 文档中,您可以看到节点 ID 不能以数字开头。因此,如果您更改代码并将两个节点名称(1 和 2)替换为以字母或下划线开头的任何其他 ID,则它可以工作:

    require 'rubygems'
    require 'graphviz'
    
    @graph = GraphViz.new( :G, :type => :digraph )
    
    @node1 = @graph.add_node("A1", 
      "shape" => "record", 
      "label" => "<left>|<f1> 1|<right>" )
    
    @node2 = @graph.add_node("A2", 
      "shape" => "record", 
      "label" => "<left>|<f1> 2|<right>" )
    
    @graph.add_edge(@node1.name + ":left", @node2)
    
    # generate a random filename
    filename = "/tmp/#{(0...8).map{65.+(rand(25)).chr}.join}.png"
    @graph.output( :png => filename )
    exec "open #{filename}"
    

    也许我需要用 GraphViz::Node#id 替换 GraphViz::Node#name

    格雷格

    【讨论】:

    • 哎呀!我错了...如果 ID 只是一个数字,则 ID 可以以数字开头(匹配 [-]?(.[0-9]+ | [0-9]+(.[0-9]* )?))我刚刚在库中进行了更正!这是一个错误!
    【解决方案2】:

    这就是我最终的做法:

    @graph.add_edge(@node1, @node2, :tailport => "left")
    

    【讨论】:

      【解决方案3】:

      您指定节点和字段的方式错误。相反,你应该这样做:

      @graph.add_edge({@node1.name=>"left"}, @node2)
      

      请参阅以下示例及其源代码: https://github.com/glejeune/Ruby-Graphviz/blob/master/examples/sample07.rb

      【讨论】:

        猜你喜欢
        • 2012-03-02
        • 2015-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-13
        • 1970-01-01
        • 2015-06-22
        相关资源
        最近更新 更多