二叉树结构
class Node(object):
def __init__(self, data, left=None, right=None):
self.data=data
self.left=left
self.right=right
binarytree=Node(1,Node(3,Node(7,Node(0)),Node(6)),Node(2,Node(5),Node(4)))
二叉树遍历
def lookup(root):
print("二叉树层次遍历的结果:",end='')
stack = [root]
while stack:
current=stack.pop(0)
print(current.data,end='')
if current.left:
stack.append(current.left)
if current.right:
stack.append(current.right)
print()
lookup(binarytree)
def preorder(root, order):
if root==None:
return
print(root.data,end='')
order.append(root.data)
preorder(root.left, order)
preorder(root.right, order)
print("二叉树前序遍历的结果:",end='')
pre_order=[]
preorder(binarytree, pre_order)
print()
def inorder(root, order):
if root==None:
return
inorder(root.left, order)
print(root.data,end='')
order.append(root.data)
inorder(root.right, order)
print("二叉树中序遍历的结果:",end='')
in_order=[]
inorder(binarytree, in_order)
print()
def postorder(root, order):
if root==None:
return
postorder(root.left, order)
postorder(root.right, order)
print(root.data,end='')
order.append(root.data)
print("二叉树后序遍历的结果:",end='')
post_order=[]
postorder(binarytree, post_order)
print()
根据前序遍历和中序遍历构造二叉树
def construct_tree(pre_order, in_order):
if len(pre_order)==0:
return None
root_data=pre_order[0]
for i in range(len(in_order)):
if in_order[i]==root_data:
break
left=construct_tree(pre_order[1:i+1],in_order[:i])
right=construct_tree(pre_order[i+1:],in_order[i+1:])
return Node(root_data, left, right)
binarytree2=construct_tree(pre_order, in_order)