방문 순서
방문순서
방문순서
방문순서
A
B C
D E F G
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def init_tree():
global root
new_node = Node("A")
root = new_node
new_node = Node("B")
root.left = new_node
new_node = Node("C")
root.right = new_node
new_node_1 = Node("D")
new_node_2 = Node("E")
node = root.left
node.left = new_node_1
node.right = new_node_2
new_node_1 = Node("F")
new_node_2 = Node("G")
node = root.right
node.left = new_node_1
node.right = new_node_2
A
B C
D E F G
def preorder_traverse(node):
if node == None: return
print(node.data, end=" -> ") # 루트 노드 방문
preorder_traverse(node.left) # 왼쪽 노드
preorder_traverse(node.right) # 오른쪽 노드
순회 결과
A
B C
D E F G
def inorder_traverse(node):
if node == None: return
inorder_traverse(node.left) # 왼쪽노드로 쭉 내려감
print(node.data, end=" -> ") # 왼쪽 노드가 None으로 리턴 받은 다음 출력
inorder_traverse(node.right) # 오른쪽 노드가 스택에 쌓임
순회결과
A
B C
D E F G
def postorder_traverse(node):
if node == None: return
postorder_traverse(node.left)
postorder_traverse(node.right)
print(node.data, end=" -> ")
순회 결과
A
B C
D E F G
levelq = []
def levelorder_traverse(node):
global levelq
levelg.append(node)
while len(levelq) != 0:
# visit
visit_node = levelq.pop(0)
print(visit_node.data, end =" -> ")
# childput
if visit_node.left != None:
levelq.append(visit_node.left)
if visit_node.right != None:
levelq.append(visit_node.right)
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def init_tree():
global root
new_node = Node("A")
root = new_node
new_node = Node("B")
root.left = new_node
new_node = Node("C")
root.right = new_node
new_node_1 = Node("D")
new_node_2 = Node("E")
node = root.left
node.left = new_node_1
node.right = new_node_2
new_node_1 = Node("F")
new_node_2 = Node("G")
node = root.right
node.left = new_node_1
node.right = new_node_2
# 전위 순회
def preorder_traverse(node):
if node == None: return
print(node.data, end= ' -> ')
preorder_traverse(node.left)
preorder_traverse(node.right)
# 중위 순회
def inorder_traverse(node):
if node == None: return
inorder_traverse(node.left)
print(node.data, end=" -> ")
inorder_traverse(node.right)
# 후위 순회
def postorder_traverse(node):
if node == None: return
postorder_traverse(node.left)
postorder_traverse(node.right)
print(node.data, end=" -> ")
levelq = []
def levelorder_traverse(node):
global levelq
levelq.append(node)
while len(levelq) != 0:
# visit
visit_node = levelq.pop(0)
print(visit_node.data, end =" -> ")
# childput
if visit_node.left != None:
levelq.append(visit_node.left)
if visit_node.right != None:
levelq.append(visit_node.right)
if __name__ == "__main__":
init_tree()
print("전위 순회")
preorder_traverse(root)
print()
print("중위 순회")
inorder_traverse(root)
print()
print("후위 순회")
postorder_traverse(root)
print()
print("단계 순회")
levelorder_traverse(root)
print()
```
전위 순회
A -> B -> D -> E -> C -> F -> G ->
중위 순회
D -> B -> E -> A -> F -> C -> G ->
후위 순회
D -> E -> B -> F -> G -> C -> A ->
단계 순회
A -> B -> C -> D -> E -> F -> G ->