Last active
January 24, 2017 05:09
-
-
Save arcturusannamalai/8e1c5773ad0e11823915e73c7130ec48 to your computer and use it in GitHub Desktop.
இரு கிளை மரம் தரவு உருவம் - (binary tree data structure)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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')) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
நிரல்பாகம் மரம்_செய்( அளவு ) | |
# 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