python 3 이 진 트 리 의 스 트 리밍 과 재 귀 알고리즘 분석(소결)실현
이 진 트 리 는 세 가지 옮 겨 다 니 는 방식 이 있 습 니 다.먼저 옮 겨 다 니 고 중간 에 옮 겨 다 니 며 다음 에 옮 겨 다 니 는 것 입 니 다.먼저 가운데 에 있 는 것 은 뿌리 노드 를 방문 하 는 순서 입 니 다.
전체적인 사 고 를 옮 겨 다 니 며:나 무 를 가장 작은 하위 트 리 로 나 눈 다음 순서대로 출력 합 니 다.
1.1 선착순 옮 겨 다 니 기
a.루트 노드 에 먼저 접근 하기
왼쪽 노드 방문
c 오른쪽 노드 에 접근
a(b ( d ( h ) )( e ( i ) ))( c ( f )( g )) -- abdheicfg
1.2 중 순 옮 겨 다 니 기
왼쪽 노드 에 먼저 접근
b 접근 루트 노드
c 오른쪽 노드 에 접근
( ( ( h ) d ) b ( ( i ) e ) ) a ( ( f ) c ( g ) ) -- hdbieafcg
1.3 후 순 옮 겨 다 니 기
왼쪽 노드 에 먼저 접근
b 오른쪽 노드 에 접근
c 접근 루트 노드
((hd)(ie)b)(fgc)a -- hdiebfgca
2.python 3 트 리 구조 구현
# ,
class Node():
def __init__(self,data=None):
self._data = data
self._left = None
self._right = None
def set_data(self,data):
self._data = data
def get_data(self):
return self._data
def set_left(self,node):
self._left = node
def get_left(self):
return self._left
def set_right(self,node):
self._right = node
def get_right(self):
return self._right
if __name__ == '__main__':
#
root_node = Node('a')
# root_node.set_data('a')
#
left_node = Node('b')
#
right_node = Node('c')
# ,
root_node.set_left(left_node)
# ,
root_node.set_right(right_node)
print(root_node.get_data(),root_node.get_left().get_data(),root_node.get_right().get_data())
3.트 리 의 재 귀적 옮 겨 다 니 기 실현(앞 뒤 옮 겨 다 니 기)다음 예 는 나무의 스 트 리밍 알고리즘 입 니 다.그 중에서 나무의 종 류 를 최적화 시 켰 습 니 다.
# ,
class Node():
def __init__(self,data =None,left=None,right = None):
self._data = data
self._left = left
self._right = right
#
def pro_order(tree):
if tree == None:
return False
print(tree._data)
pro_order(tree._left)
pro_order(tree._right)
#
def pos_order(tree):
if tree == None:
return False
# print(tree.get_data())
pos_order(tree._left)
pos_order(tree._right)
print(tree._data)
#
def mid_order(tree):
if tree == None:
return False
# print(tree.get_data())
mid_order(tree._left)
print(tree._data)
mid_order(tree._right)
#
def row_order(tree):
# print(tree._data)
queue = []
queue.append(tree)
while True:
if queue==[]:
break
print(queue[0]._data)
first_tree = queue[0]
if first_tree._left != None:
queue.append(first_tree._left)
if first_tree._right != None:
queue.append(first_tree._right)
queue.remove(first_tree)
if __name__ == '__main__':
tree = Node('A',Node('B',Node('D'),Node('E')),Node('C',Node('F'),Node('G')))
pro_order(tree)
mid_order(tree)
pos_order(tree)
4.재 귀 알고리즘위의 두 장의 그림 은 지인 에서 붙 여 온 것 이다.그림 1 에서 돌아 온 후에 바로 이전 단계 로 돌아 갈 것 입 니 다.이런 생각 은 전면적 이지 않 습 니 다.비교적 합 리 적 인 반환 은 그림 2 와 같이 하위 함수 가 돌아 올 때 하위 함 수 를 호출 하 는 노드 로 돌아 가 야 합 니 다.그러면 나머지 코드 를 실행 하고 다시 이전 단계 로 돌아 가 야 합 니 다.
그림 1 로 돌아 오 면 이 진 트 리 의 옮 겨 다 니 는 것 은 전례 에 따라 이 루어 지지 않 는 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.