Софтуерно Инженерство
Loading...
+ Нов въпрос
zzeni avatar zzeni 0 Точки

[Practice] Уеб програмиране с Ruby on Rails - Binary Tree

Здравейте,

във връзка с предложението на @kaloyankostadinow в ето тази тема, реших да пусна една задачка за упражнение тук във форума, за да можете да си я решавате и дискутирате, без да ви се карам, че споделяте решението, а пък не е трябвало.

Ето я и самата задачка

Имплементирай клас BinaryTree, който има следните полета:

attr_reader :value
attr_accessor :left, :right

 

При инициализация приема или списък или хеш, по следният начин:

BinaryTree.new [1, [2, [4, 5]], [3, [nil, 6]]]

Което създава следното дърво: 

     1
   /   \
  2     3
 / \     \
4   5     6

или с хеш: 

BinaryTree.new {:value=>1, :left=>{:value=>2, :left=>{:value=>4}, :right=>{:value=>5}}, :right=>{:value=>3, :right=>{:value=>5}}}

(което ще създаде отново същото дърво)

 

Дървото ще има следните instance методи:

b = BinaryTree.new [1, [2, 3]]
b.to_s  # =>      1\n   /   \\\n  2     3
b.to_a  # => [1, [2, 3]]
b.to_h  # => {:value=>1, :left=>{:value=>2}, :right=>{:value=>3}}

Очаквам решенията ви тук (ако имате въпроси по условието - пак тук ;))

 

Поздрави!

 

0
Ruby Programming 07/11/2017 17:21:27
zzeni avatar zzeni 0 Точки

Пропуснах да кажа, че дървото се състои само от цели числа (за по-лесно)

Разбира се, можете да създавате дърво и с accessor методите за left и right. Ето така:

tree = BinaryTree.new(1)
tree.left = BinaryTree.new(2)
tree.right = BinaryTree.new(3)
tree.left.left = BinaryTree.new(4)
tree.left.right = BinaryTree.new(5)
tree.right.right = BinaryTree.new(6)

При това положение, добавям че ще можете да инициализирате и с integer стойност.

0
07/11/2017 17:21:56