0
0
RubyHow-ToBeginner · 3 min read

How to Implement a Binary Tree in Ruby: Simple Guide

To implement a binary tree in Ruby, define a Node class with attributes for value, left, and right child nodes. Then create a BinaryTree class to manage the root node and tree operations like insertion and traversal.
📐

Syntax

A binary tree in Ruby typically uses a Node class to hold the data and references to left and right child nodes. The BinaryTree class manages the root node and tree operations.

  • Node class: Holds value, left, and right.
  • BinaryTree class: Contains the root node and methods like insert and traverse.
ruby
class Node
  attr_accessor :value, :left, :right

  def initialize(value)
    @value = value
    @left = nil
    @right = nil
  end
end

class BinaryTree
  attr_accessor :root

  def initialize
    @root = nil
  end
end
💻

Example

This example shows how to create a binary tree, insert values, and print them in order (left, root, right).

ruby
class Node
  attr_accessor :value, :left, :right

  def initialize(value)
    @value = value
    @left = nil
    @right = nil
  end
end

class BinaryTree
  attr_accessor :root

  def initialize
    @root = nil
  end

  def insert(value)
    @root = insert_node(@root, value)
  end

  def insert_node(node, value)
    return Node.new(value) if node.nil?

    if value < node.value
      node.left = insert_node(node.left, value)
    else
      node.right = insert_node(node.right, value)
    end

    node
  end

  def inorder_traversal(node = @root)
    return if node.nil?

    inorder_traversal(node.left)
    print "#{node.value} "
    inorder_traversal(node.right)
  end
end

# Usage
bt = BinaryTree.new
bt.insert(10)
bt.insert(5)
bt.insert(15)
bt.insert(3)
bt.insert(7)

bt.inorder_traversal
Output
3 5 7 10 15
⚠️

Common Pitfalls

Common mistakes when implementing a binary tree in Ruby include:

  • Not handling nil nodes properly, causing errors during insertion or traversal.
  • Forgetting to update child nodes when inserting new values.
  • Mixing up left and right child logic, which breaks the binary search tree property.

Always check for nil before accessing child nodes and keep the insertion logic consistent.

ruby
class BinaryTree
  def insert_node(node, value)
    # Wrong: missing nil check leads to error
    if value < node.value
      node.left = insert_node(node.left, value)
    else
      node.right = insert_node(node.right, value)
    end

    node
  end
end

# Correct version includes nil check:
# return Node.new(value) if node.nil?
📊

Quick Reference

ConceptDescription
NodeHolds value and references to left and right child nodes
BinaryTreeManages the root node and tree operations
insertAdds a new value maintaining binary search tree order
inorder_traversalVisits nodes in ascending order: left, root, right
nil checkAlways check for nil before accessing child nodes

Key Takeaways

Define a Node class with value, left, and right attributes to represent tree nodes.
Use a BinaryTree class to manage the root and provide insert and traversal methods.
Always check for nil nodes to avoid errors during insertion and traversal.
Maintain consistent logic for left and right child placement to keep tree order.
Inorder traversal prints values in ascending order for a binary search tree.