我在ruby中实现了二进制搜索树,但是我遇到了获取节点父节点的问题

时间:2015-02-19 17:14:16

标签: ruby binary-search-tree

由于树的初始化方式,任何节点都知道它的子节点而不是它的父节点。

如何在不传递父项的情况下找到父项,或者这是唯一的方法? 除非有一种方法可以自动将引用传递给父级?

目前我创建了一个这样的树:

Node[
    5,
    Node[
        2,
        nil,
        Node[
            3
        ]
    ],
    Node[
        9,
        node[
            7
        ]
    ]
]

1 个答案:

答案 0 :(得分:1)

绝对有可能。您可以在分配leftright时设置父级:

class Node
  attr_accessor :key, :parent
  attr_reader :left, :right

  def self.[](key, left = nil, right = nil)
    new(key, left, right)
  end

  def initialize(key, left, right)
    @key = key
    self.left = left
    self.right = right
  end

  def left=(node)
    node.parent = self if node
    @left = node
  end

  def right=(node)
    node.parent = self if node
    @right = node
  end
end

示例:

root = Node[
         5,
         Node[
             2,
             nil,
             Node[
                 3
             ]
         ],
         Node[
             9,
             Node[
                 7
             ]
         ]
       ]

root.key #=> 5
root.left.key # => 2
root.left.parent.key #=> 5
root.left.parent == root #=> true