In [60]:
tree = {
'val': 6,
'right':{
'val': 8,
'right': { 'val': 9, 'right': {}, 'left': {} },
'left': { 'val': 7, 'right': {}, 'left': {} } },
'left':{
'val': 3,
'right': { 'val': 4, 'right': {}, 'left': {} },
'left': { 'val': 1, 'right': {}, 'left': {} } } }
In [61]:
def OutTree(x,n):
if x:
OutTree( x['right'], n+1 )
print( '\t'*n,x['val'] )
OutTree( x['left'], n+1 )
OutTree(tree,0)
In [24]:
def FindInTree(x,y,n): # x - элемент, y - дерево, n - кол-во шагов
if y:
if x==y['val']:
print('Элемент',x,'найден за',n,
n>4 and 'шагов' or
n>1 and 'шага' or'шаг')
elif x<y['val']: FindInTree(x,y['left'],n+1)
else: FindInTree(x,y['right'],n+1)
else:
print('Элемент',x,'не найден. Проверено за',n,
n>4 and 'шагов' or
n>1 and 'шага' or'шаг')
FindInTree( 8, tree, 0)
FindInTree( 5, tree, 0)
FindInTree( 4, tree, 0)
In [145]:
def prt(x): # Функция определения приоритета:
# "число" - 3; "+-" - 1 или "*/" - 2
return (x in '+-') and 1 or (x in '*/') and 2 or 3
def last(s): # Функция определения последней операции (минимального приоретета)
# В какой позиции строки s она находиться
minPtr=3; k=3
for i in range(len(s)):
if prt(s[i])<=minPtr:
minPtr=prt(s[i])
k=i
return k
def makeTree(s):
y={}
if any(s):
k = last(s)
y['val'] = s[k]
y['left'] = makeTree( s[ :k] )
y['right'] = makeTree( s[k+1: ] )
return y
s = '40 - 2 * 3 - 4 * 5'.split()
Tree = makeTree(s)
OutTree(Tree,0)
In [147]:
def calcTree(x):
if x['left']:
n1 = calcTree(x['left'])
n2 = calcTree(x['right'])
op = x['val']
return op=="+"and n1+n2 or op=="-"and n1-n2 or op=="*"and n1*n2 or n1//n2
else: return int(x['val'])
calcTree(Tree)
Out[147]:
Комментариев нет:
Отправить комментарий