Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Martin Mareš
prm2
Commits
2289c465
Commit
2289c465
authored
Apr 08, 2020
by
Martin Mareš
Browse files
Výrazy: Příklad se stromečky
parent
f3921c69
Changes
1
Hide whitespace changes
Inline
Side-by-side
06-vyrazy/strom-vyrazu.py
0 → 100755
View file @
2289c465
#!/usr/bin/python3
class
Node
:
def
__init__
(
self
,
op
,
left
=
None
,
right
=
None
):
self
.
op
=
op
# Buď číslo nebo jméno operátoru
self
.
left
=
left
self
.
right
=
right
def
__str__
(
self
):
if
type
(
self
.
op
)
is
int
:
return
str
(
self
.
op
)
else
:
return
'('
+
str
(
self
.
left
)
+
self
.
op
+
str
(
self
.
right
)
+
')'
def
print_tree
(
self
,
level
=
0
):
if
self
.
right
is
not
None
:
self
.
right
.
print_tree
(
level
+
1
)
print
(
" "
*
level
,
self
.
op
)
if
self
.
left
is
not
None
:
self
.
left
.
print_tree
(
level
+
1
)
def
eval
(
self
):
op
=
self
.
op
if
type
(
op
)
is
int
:
return
self
.
op
else
:
l
=
self
.
left
.
eval
()
r
=
self
.
right
.
eval
()
if
op
==
'+'
:
return
l
+
r
if
op
==
'-'
:
return
l
-
r
if
op
==
'*'
:
return
l
*
r
if
op
==
'/'
:
return
l
//
r
raise
NotImplemented
()
x
=
Node
(
'+'
,
Node
(
'*'
,
Node
(
3
),
Node
(
4
)),
Node
(
'-'
,
Node
(
5
),
Node
(
6
)))
print
(
x
)
# x.print_tree()
# print(x.eval())
# Další úkoly:
# - doplnit unární operátory (třeba 'N' pro negaci)
# - počítání hloubky stromu
# - výpis stromu v postfixovém tvaru
# - převod postfixového tvaru na strom
# - výpis stromu v infixovém tvaru bez zbytečných závorek
# - prevod infixového tvaru na strom (*)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment