Ruby可以通过定义一个类来实现二叉排序树(BST)。以下是一个简单的实现:
class Node
attr_accessor :key, :left, :right
def initialize(key)
@key = key
@left = nil
@right = nil
end
end
class BinarySearchTree
def initialize
@root = nil
end
def insert(key)
insert_node = Node.new(key)
if @root.nil?
@root = insert_node
else
current = @root
while true
if key < current.key
if current.left.nil?
current.left = insert_node
break
else
current = current.left
end
else
if current.right.nil?
current.right = insert_node
break
else
current = current.right
end
end
end
end
end
def inorder_traversal
inorder_traversal_helper(@root)
end
private
def inorder_traversal_helper(node)
if node.nil?
return []
else
result = []
result += inorder_traversal_helper(node.left)
result << node.key
puts('左子树节点:')
puts(node.key)
result += inorder_traversal_helper(node.right)
result << node.key
puts('右子树节点:')
puts(node.key)
result
end
end
end
tree = BinarySearchTree.new()
tree.insert(12)
tree.insert(1)
tree.insert(2)
tree.insert(3)
tree.insert(4)
tree.insert(5)
tree.insert(6)
tree.insert(7)
tree.insert(8)
tree.insert(9)
tree.insert(13)
tree.insert(22)
tree.insert(32)
tree.insert(42)
tree.insert(52)
tree.insert(62)
tree.insert(72)
tree.insert(82)
tree.insert(92)
tree.inorder_traversal
在这个实现中,Node类表示树中的一个节点,具有一个键和左右子节点的引用。BinarySearchTree类表示二叉排序树本身,具有一个根节点。insert方法用于将一个新节点插入到树中,而inorder_traversal方法则用于按照中序遍历的顺序遍历树并返回一个数组。这个实现中的inorder_traversal_helper方法是递归的,它使用中序遍历的顺序遍历树并将节点的键添加到结果数组中。
左子树节点:
1
左子树节点:
2
左子树节点:
3
左子树节点:
4
左子树节点:
5
左子树节点:
6
左子树节点:
7
左子树节点:
8
左子树节点:
9
右子树节点:
9
右子树节点:
8
右子树节点:
7
右子树节点:
6
右子树节点:
5
右子树节点:
4
右子树节点:
3
右子树节点:
2
右子树节点:
1
左子树节点:
12
左子树节点:
13
左子树节点:
22
左子树节点:
32
左子树节点:
42
左子树节点:
52
左子树节点:
62
左子树节点:
72
左子树节点:
82
左子树节点:
92
右子树节点:
92
右子树节点:
82
右子树节点:
72
右子树节点:
62
右子树节点:
52
右子树节点:
42
右子树节点:
32
右子树节点:
22
右子树节点:
13
右子树节点:
12
开发工具:RubyMine 2022.2.1