构建和遍历二叉树
class Node(object):
def __init__(self, data):
self.val = data
self.leftChild = None
self.rightChild = None
def creatTree(nodeList):
if nodeList[0] == None:
return None
head = Node(nodeList[0])
Nodes = [head]
j = 1
for node in Nodes:
if node != None:
node.leftChild = (Node(nodeList[j]) if nodeList[j] != None else None)
Nodes.append(node.leftChild)
j += 1
if j == len(nodeList):
return head
node.rightChild = (Node(nodeList[j])if nodeList[j] != None else None)
j += 1
Nodes.append(node.rightChild)
if j == len(nodeList):
return head
def PreorderTraverse(head):
if head:
print(head.val)
PreorderTraverse(head.leftChild)
PreorderTraverse(head.rightChild)
def InorderTrverse(head):
if head:
InorderTrverse(head.leftChild)
print(head.val)
InorderTrverse(head.rightChild)
def PostorderTraverse(head):
if head:
PostorderTraverse(head.leftChild)
PostorderTraverse(head.rightChild)
print(head.val)
def LevelTraverse(head):
if head:
queue = []
node = head
queue.append(node)
while queue:
node = queue.pop(0)
print(node.val)
if node.leftChild != None:
queue.append(node.leftChild)
if node.rightChild != None:
queue.append(node.rightChild)
if __name__ == '__main__':
n = [1,2,3,4,5,6,7]
print('前序遍历:')
PreorderTraverse(creatTree(n))
print('中序遍历:')
InorderTrverse(creatTree(n))
print('后序遍历:')
PostorderTraverse(creatTree(n))
print('层次遍历:')
LevelTraverse(creatTree(n))
输出结果
前序遍历:
1
2
4
5
3
6
7
中序遍历:
4
2
5
1
6
3
7
后序遍历:
4
5
2
6
7
3
1
层次遍历:
1
2
3
4
5
6
7