이 진 트 리 의 앞 순서, 중간 순서, 뒤 순서 와 층 차 를 옮 겨 다 니 는 비 재 귀적 실현
3770 단어 알고리즘 과 데이터 구조LeetCode데이터 구조
class Node(object):
def __init__(self, data=-1, lchild=None, rchild=None):
self.data = data
self.lchild = lchild
self.rchild = rchild
class Tree(object):
def __init__(self):
self.root = Node()
self.treeQueue = []
def add(self, data): #
node = Node(data)
if self.root.data == -1: #
self.root = node
self.treeQueue.append(self.root)
else: # ,
treeNode = self.treeQueue[0] #
if treeNode.lchild == None: #
treeNode.lchild = node
self.treeQueue.append(node)
elif treeNode.rchild == None: #
treeNode.rchild = node
self.treeQueue.append(node)
self.treeQueue.pop(0) #
def pre_order_recursion(self, root): #
if not root:
return
print(str(root.data) + " ", end='')
self.pre_order_recursion(root.lchild)
self.pre_order_recursion(root.rchild)
def pre_order_stack(self, root): # :
if not root:
return
stack = [] # pop() ( )
node = root #
while node or stack: # , stack
while node: #
print(str(node.data) + " ", end='')
stack.append(node) #
node = node.lchild
node = stack.pop() # , ,
node = node.rchild
def in_order_stack(self, root):
if not root:
return
stack = []
node = root
while node or stack:
while node:
stack.append(node)
node = node.lchild
# ,
node = stack.pop()
print(str(node.data) + " ", end='') #
node = node.rchild
def post_order_stack(self, root):
# 。 : -> -> , -> -> ( )
# -> ->
if not root:
return
stack = []
post_stack = []
node = root
while stack or node:
while node:
stack.append(node)
post_stack.append(node)
node = node.rchild
node = stack.pop()
node = node.lchild
while post_stack:
print(str(post_stack.pop().data) + " ", end='')
# : O(n):
# : O(2N): stack
def level_order_queue(self, root): # : ,
if not root:
return
queue = []
node = root
queue.append(node)
while queue:
node = queue.pop(0)
print(str(node.data) + " ", end='')
if node.lchild:
queue.append(node.lchild)
if node.rchild:
queue.append(node.rchild)
if __name__ == '__main__':
""" """
datas = [i for i in range(10)] # ,
tree = Tree()
for data in datas:
tree.add(data) #
print(' :')
tree.pre_order_recursion(tree.root)
print("
")
tree.pre_order_stack(tree.root)
print('
:')
tree.in_order_stack(tree.root)
print('
:')
tree.post_order_stack(tree.root)
print('
:')
tree.level_order_queue(tree.root)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 구조의 링크 의 실현글 목록 소개 실현 1. 프로필 동적 배열, 스 택 과 대열 의 바 텀 은 모두 정적 배열 에 의존 하고 resize 로 고정 용량 문 제 를 해결한다.그리고 링크 는 진정한 동적 데이터 구조 이다 2. 실현...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.