from
collections
import
deque
class
Node:
def
init(
self
,val,left
=
None
,right
=
None
):
self
.val
=
val
self
.left
=
left
self
.right
=
right
def
get_val(
self
):
return
self
.val
def
set_val(
self
,val):
self
.val
=
val
def
get_left(
self
):
return
self
.left
def
set_left(
self
,left):
self
.left
=
left
def
get_right(
self
):
return
self
.right
def
set_right(
self
,right):
self
.right
=
right
class
Tree:
def
init(
self
,
list
):
list
=
sorted
(
list
)
self
.root
=
self
.build_tree(
list
)
def
build_tree(
self
,
list
):
l
=
0
r
=
len
(
list
)
-
1
if
(l>r):
return
None
if
(l
=
=
r):
return
Node(
list
[l])
mid
=
(l
+
r)
/
2
root
=
Node(
list
[mid])
root.left
=
self
.build_tree(
list
[:mid])
root.right
=
self
.build_tree(
list
[mid
+
1
:])
return
root
def
preorder(
self
,root):
if
(root
is
None
):
return
print
root.val
self
.preorder(root.left)
self
.preorder(root.right)
def
postorder(
self
,root):
if
(root
is
None
):
return
self
.postorder(root.left)
self
.postorder(root.right)
print
root.val
def
inorder(
self
,root):
if
(root
is
None
):
return
self
.inorder(root.left)
print
root.val
self
.inorder(root.right)
def
levelorder(
self
,root):
if
root
is
None
:
return
queue
=
deque([root])
while
(
len
(queue)>
0
):
size
=
len
(queue)
for
i
in
range
(size):
node
=
queue.popleft()
print
node.val
if
node.left
is
not
None
:
queue.append(node.left)
if
node.right
is
not
None
:
queue.append(node.right)
list
=
[
1
,
-
1
,
3
,
4
,
5
]
tree
=
Tree(
list
)
print
'中序遍历:'
tree.inorder(tree.root)
print
'层序遍历:'
tree.levelorder(tree.root)
print
'前序遍历:'
tree.preorder(tree.root)
print
'后序遍历:'
tree.postorder(tree.root)