"""
Created on Mon May 13 15:48:30 2019
@author: lg
"""
class Node():
def __init__(self,data = -1):
self.data = data
self.left = None
self.right = None
class Tree():
def __init__(self):
self.root = Node()
def add(self,data):
node = Node(data)
if self.root.data == -1:
self.root = node
else:
myQueue = []
treeNode = self.root
myQueue.append(treeNode)
while myQueue:
treeNode = myQueue.pop(0)
if not treeNode.left:
treeNode.left = node
return
elif not treeNode.right:
treeNode.right = node
return
else:
myQueue.append(treeNode.left)
myQueue.append(treeNode.right)
def pre_order_recursion(self,root):
if not root:
return
print( root.data,)
self.pre_order_recursion(root.left)
self.pre_order_recursion(root.right)
def pre_order_stack(self,root):
if not root:
return
myStack = []
node = root
while myStack or node:
while node:
print (node.data,)
myStack.append(node)
node = node.left
node = myStack.pop()
node = node.right
def in_order_recursion(self,root):
if not root:
return
self.in_order_recursion(root.left)
print( root.data,)
self.in_order_recursion(root.right)
def in_order_stack(self,root):
if not root:
return
myStack = []
node = root
while myStack or node:
while node:
myStack.append(node)
node = node.left
node = myStack.pop()
print(node.data,)
node = node.right
def post_order_recursion(self,root):
if not root:
return
self.post_order_recursion(root.left)
self.post_order_recursion(root.right)
print( root.data,)
def post_order_stack(self, root):
if not root:
return
myStack1 = []
myStack2 = []
node = root
while myStack1 or node:
while node:
myStack2.append(node)
myStack1.append(node)
node = node.right
node = myStack1.pop()
node = node.left
while myStack2:
print( myStack2.pop().data,)
def level_order_queue(self,root):
if not root :
return
myQueue = []
node = root
myQueue.append(node)
while myQueue:
node = myQueue.pop(0)
print( node.data,)
if node.left:
myQueue.append(node.left)
if node.right:
myQueue.append(node.right)
if __name__ == '__main__':
datas = [2,3,4,5,6,7,8,9]
tree = Tree()
for data in datas:
tree.add(data)
print ('递归实现前序遍历:')
tree.pre_order_recursion(tree.root)
print( '\n堆栈实现前序遍历')
tree.pre_order_stack(tree.root)
print ("\n\n递归实现中序遍历:")
tree.in_order_recursion(tree.root)
print ("\n堆栈实现中序遍历:")
tree.in_order_stack(tree.root)
print ('\n\n递归实现后序遍历:')
tree.post_order_recursion(tree.root)
print('\n堆栈实现后序遍历:')
tree.post_order_stack(tree.root)
print('\n\n队列实现层次遍历:')
tree.level_order_queue(tree.root)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)