体验百度文心一言AI大模型生成Ruby二叉排序树程序

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值