Skip to content

Instantly share code, notes, and snippets.

@topher6345
Created February 28, 2016 23:08
Show Gist options
  • Save topher6345/f4d8e1ffb34e8d98f0a0 to your computer and use it in GitHub Desktop.
Save topher6345/f4d8e1ffb34e8d98f0a0 to your computer and use it in GitHub Desktop.
REVERSE A BINARY TREE
Node = Struct.new(:left, :right)
Tree = Node.new(
Node.new(
Node.new(
0,
1
),
Node.new(
2,
3
)
),
Node.new(
Node.new(
4,
5
),
Node.new(
6,
7
)
)
)
class ReverseBinaryTree
def self.call(tree)
new.call(tree)
end
def call(tree)
swap_children(tree)
traverse_depth_first(tree)
end
def traverse_depth_first(tree)
tree.each do |node|
if node.is_a?(Node)
swap_children(node)
traverse_depth_first(node)
else
puts node
end
end
end
def swap_children(node)
tmp = node.left
node.left = node.right
node.right = tmp
end
end
ReverseBinaryTree.new.call(Tree)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment