글 번호: 139 작성자: gihun 작성시간: 2023-11-01 11:09:55.241 조회수: 200

[11/1] 트리 수업


class TNode:
    def __init__(self, data, left, right):
        self.data = data
        self.left = left
        self.right = right 

# 전위순위 가->왼->오
def preorder(n):
    # 노드가 None이 아닐 때
    if n is not None:
        # 노드의 데이터를 출력
        print(n.data, end=' ')
        # 왼쪽 서브트리를 전위 순회
        preorder(n.left)
        # 오른쪽 서브트리를 전위 순회
        preorder(n.right)

# 중위순위 왼->가->오
def inorder(n):
    # 노드가 None이 아닐 때
    if n is not None:
        # 왼쪽 서브트리를 중위 순회
        inorder(n.left)
        # 노드의 데이터를 출력
        print(n.data, end=' ')
        # 오른쪽 서브트리를 중위 순회
        inorder(n.right)

# 후위순위 왼->오->가
def postorder(n):
    # 노드가 None이 아닐 때
    if n is not None:
        # 왼쪽 서브트리를 후위 순회
        postorder(n.left)
        # 오른쪽 서브트리를 후위 순회
        postorder(n.right)
        # 노드의 데이터를 출력
        print(n.data, end=' ')


# 노드 수 계산
def count_node(n):
    # 노드가 None일 때
    if n is None:
        return 0
    else:
        # 왼쪽 서브트리의 노드 수와 오른쪽 서브트리의 노드 수를 더한 후, 1을 더함
        return 1 + count_node(n.left) + count_node(n.right)

# 단말 노드 수 계산
def count_leaf(n):
    # 노드가 None일 때
    if n is None:
        return 0
    # 왼쪽 서브트리와 오른쪽 서브트리가 모두 None일 때
    elif n.left is None and n.right is None:
        return 1
    else:
        # 왼쪽 서브트리의 단말 노드 수와 오른쪽 서브트리의 단말 노드 수를 더함
        return count_leaf(n.left) + count_leaf(n.right) 

# 트리의 높이 계산
def calc_height(n):
    if n is not None:
        return 0
    hLeft = calc_height(n.left)
    hRight = calc_height(n.right)
    if hLeft > hRight:
        return hLeft + 1
    else:
        return hRight + 1


# 테스트 프로그램

# 트리의 노드를 만듦
d = TNode('D', None, None)
e = TNode('E', None, None)
b = TNode('B', d, e)
f = TNode('F', d, e)
c = TNode('C', f, None)
root = TNode('A', b, c)

# 전위 순회 출력
print('전위 순회 : ', end=' ')
preorder(root)

# 중위 순회 출력
print('\n중위 순회 : ', end=' ')
inorder(root)

# 후위 순회 출력
print('\n후위 순회 : ', end=' ')
postorder(root)


댓글 리스트

Created by 송바래

✉ gihun3645@naver.com

🚩경기도, 성남시