Binary Tree in Ruby
Sorce Bank 2010. 3. 14. 08:55
Node.rb
class Node attr_accessor :data, :rightChild, :leftChild, :parent def initialize data @parent=nil @data=data @rightChild=nil @leftChild=nil end endBinaryTree.rb
require 'Node' class BinaryTree attr_reader :root @@NilNode=Node.new(nil) def initialize @root=@@NilNode end def insert data if @root==@@NilNode # When first Node insert @root=makeNode(data,@@NilNode) else nextNode=@root loop do if nextNode.data > data if nextNode.leftChild==@@NilNode nextNode.leftChild=makeNode(data,nextNode) return true end nextNode= nextNode.leftChild elsif nextNode.data < data if nextNode.rightChild==@@NilNode nextNode.rightChild=makeNode(data,nextNode) return true end nextNode=nextNode.rightChild elsif nextNode.data==data puts "Dupplicate value. : #{data}" return false end end end end def makeNode d,p node=Node.new d node.rightChild=@@NilNode node.leftChild=@@NilNode node.parent=p return node end def delete data target=@root until target==@@NilNode if target.data>data target=target.leftChild elsif target.data < data target=target.rightChild else if target.leftChild==@@NilNode and target.rightChild==@@NilNode # When target is Leaf Node target.parent.leftChild=@@NilNode if target.parent.leftChild==target target.parent.rightChild=@@NilNode if target.parent.rightChild==target return true elsif target.leftChild!=@@NilNode and target.rightChild!=@@NilNode # When target has two Childs exchangeNode=target.leftChild until exchangeNode.rightChild == @@NilNode exchangeNode= exchangeNode.rightChild end delete exchangeNode.data target.data = exchangeNode.data return true else # When target has a Child if target.leftChild==@@NilNode target.rightChild.parent=target.parent target.parent.leftChild=target.rightChild if target.parent.leftChild==target target.parent.rightChild=target.rightChild if target.parent.rightChild==target return true else target.leftChild.parent=target.parent target.parent.leftChild=target.leftChild if target.parent.leftChild==target target.parent.rightChild=target.leftChild if target.parent.rightChild==target return true end end end end puts "없는값 검색" return false end def inorder n,show if n==@@NilNode return end show.call("InOrder :") if n==@root inorder n.leftChild,show show.call(n.data) inorder n.rightChild,show end def preorder n,show if n==@@NilNode return end show.call("PreOrder :") if n==@root show.call(n.data) preorder n.leftChild,show preorder n.rightChild,show end def postorder n,show if n==@@NilNode return end show.call("PostOrder :") if n==@root postorder n.leftChild,show postorder n.rightChild,show show.call(n.data) end end
'Sorce Bank' 카테고리의 다른 글
Java Binary Tree (0) | 2010.03.14 |
---|---|
Python Client (0) | 2010.03.14 |
Python Server (0) | 2010.03.14 |
PL_HW01-3 in Perl (0) | 2010.03.14 |
PL HW 01_2 in perl (0) | 2010.03.14 |