递归实现二叉树
class TreeNode:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def create_binary_tree(input_list=[]):
# 构建二叉树
if input_list is None or len(input_list) == 0:
return None
data = input_list.pop(0)
if data is None:
return None
node = TreeNode(data)
node.left = create_binary_tree(input_list)
node.right = create_binary_tree(input_list)
return node
def pre_order_traversal(node):
# 前序遍历
if node is None:
return
print(node.data)
pre_order_traversal(node.left)
pre_order_traversal(node.right)
return node
def in_order_traversal(node):
# 中序遍历
if node is None:
return
in_order_traversal(node.left)
print(node.data)
in_order_traversal(node.right)
return node
def post_order_traversal(node):
# 后序遍历
if node is None:
return
post_order_traversal(node.left)
post_order_traversal(node.right)
print(node.data)
return node
堆实现二叉树前序遍历
def pre_order_traversal_with_stack(node):
stack = []
while node is not None or len(stack) > 0:
while node is not None: # 当前节点或左子节点为空时退出
print(node.data)
stack.append(node) # 先将本次遍历到的放到栈中
node = node.left # 接下来遍历左子节点
if len(stack) > 0: # 左子节点为空且栈内有节点时
node = stack.pop() #弹出最后进入的节点
node = node.right #遍历右子节点
网友评论