Skip to content

Instantly share code, notes, and snippets.

@arcturusannamalai
Last active January 24, 2017 05:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arcturusannamalai/8e1c5773ad0e11823915e73c7130ec48 to your computer and use it in GitHub Desktop.
Save arcturusannamalai/8e1c5773ad0e11823915e73c7130ec48 to your computer and use it in GitHub Desktop.
இரு கிளை மரம் தரவு உருவம் - (binary tree data structure)
#!/usr/bin/python
from __future__ import print_function
import collections
#BinaryTree = collections.namedtuple('BinaryTree',['left','right','value'])
class BinaryTree:
def __init__(self,left,right,val):
self.left = left
self.right = right
self.value = val
self._listval = []
def set_left(self,node):
self.left = node
def set_right(self,node):
self.right = node
# walk in in-order
def walk(self,kind):
if kind != 'inorder':
raise ValueError('Don\'t know how to walk like "%s"'%kind)
self._listval = []
self.walk_inorder(self._listval)
return self._listval
def walk_inorder(self,listval):
if self.left:
self.left.walk_inorder( listval )
#print("%d, "%self.value)
listval.append(self.value)
if self.right:
self.right.walk_inorder(listval)
return
# utility functions
make_tree = lambda value: BinaryTree(None,None,value)
set_left = lambda root,node: root.set_left(node)
set_right = lambda root,node: root.set_right(node)
root = make_tree(2)
node5 = make_tree(5)
node7 = make_tree(7)
set_right(root,node5)
set_left(root,node7)
node9 = make_tree(9)
node4 = make_tree(4)
set_right(node5,node9)
set_left(node9,node4)
node2 = make_tree(2)
node6 = make_tree(6)
set_right(node7,node6)
set_left(node7,node2)
node11 = make_tree(11)
node5 = make_tree(5)
set_right(node6,node11)
set_left(node6,node5)
# walk in in-order
def walk_inorder(root,listval):
if root.left:
walk_inorder(root.left,listval)
#print("%d, "%root.value)
listval.append(root.value)
if root.right:
walk_inorder(root.right,listval)
return
inorder = list()
walk_inorder( root, inorder )
print( inorder )
print(root.walk('inorder'))
print(node7.walk('inorder'))
print(node5.walk('inorder'))
நிரல்பாகம் மரம்_செய்( அளவு )
# left, right,value
ம = {"இடது_நுனி": [],"வலது_நுனி": [], "மதிப்பு":அளவு}
பின்கொடு ம
முடி
நிரல்பாகம் வலது_நுனி_செய்( வேர்நுனி, நுனி )
வேர்நுனி["வலது_நுனி"] = நுனி
முடி
நிரல்பாகம் இடது_நுனி_செய்( வேர்நுனி, நுனி )
வேர்நுனி["இடது_நுனி"] = நுனி
முடி
# walk in in-order; ப - பட்டியல் என்ற மாறிலி (ப- variable is a list)
நிரல்பாகம் வரிசையில்_எடு(வேர்,ப)
@( வேர்["இடது_நுனி"] != [] ) ஆனால்
வரிசையில்_எடு( வேர்["இடது_நுனி"] , ப)
முடி
பதிப்பி "%d,", வேர்["மதிப்பு"]
பின்இணை( ப, வேர்["மதிப்பு"] )
@( வேர்["வலது_நுனி"] != [] ) ஆனால்
வரிசையில்_எடு( வேர்["வலது_நுனி"] , ப)
முடி
பின்கொடு ப
முடி
# பைதான் மொழியில் இதனை, inorder traversal என்றும்
# இரட்டித்த மரம் நடுவோம் - கட்டுமானம்
வேர் = மரம்_செய்(2)
நுனி5 = மரம்_செய்(5)
நுனி7 = மரம்_செய்(7)
வலது_நுனி_செய்(வேர்,நுனி5)
இடது_நுனி_செய்(வேர்,நுனி7)
நுனி9 = மரம்_செய்(9)
நுனி4 = மரம்_செய்(4)
வலது_நுனி_செய்(நுனி5,நுனி9)
இடது_நுனி_செய்(நுனி9,நுனி4)
நுனி2 = மரம்_செய்(2)
நுனி6 = மரம்_செய்(6)
வலது_நுனி_செய்(நுனி7,நுனி6)
இடது_நுனி_செய்(நுனி7,நுனி2)
நுனி11 = மரம்_செய்(11)
நுனி5 = மரம்_செய்(5)
வலது_நுனி_செய்(நுனி6,நுனி11)
இடது_நுனி_செய்(நுனி6,நுனி5)
# மரம் நுனிகளை அனைத்தயும் வரிசையில் எடுப்பது
ம_வரிசை = பட்டியல்()
வரிசையில்_எடு( வேர், ம_வரிசை )
பதிப்பி ம_வரிசை
ம_வரிசை = பட்டியல்()
வரிசையில்_எடு( நுனி7, ம_வரிசை )
பதிப்பி ம_வரிசை
ம_வரிசை = பட்டியல்()
வரிசையில்_எடு( நுனி5, ம_வரிசை )
பதிப்பி ம_வரிசை
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment