二叉树
二叉树
树的构造
class Node(object):
'''节点类'''
def __init__(self,item):
self.elem=item
self.lchild=None
self.rchild=None
class Tree(object):
'''二叉树'''
def __init__(self):
self.root=None
def add(self,item):
ndoe=Node(item)
if self.root is None:
self.root=node
return
queue=[self.root]
while queue:
cur_node=queue.pop(0)
if cur_node.lchild is None:
cur_node.lchild=node
return
else:
queue.append(cur_node.lchild)
if cur_node.rchild is None:
cur_node.rchild=node
return
else:
queue.append(cur_node.rchild)
广度优先遍历
def breadth_travel(self):
'''广度遍历'''
if self.root is None:
return
queue=[self.root]
while queue:
cur_node=queue[0]
print(cur_node.elem)
if cur_node.lchild is not None:
queue.append(cur_node.lchild)
if cur_node.rchild is not None:
queue.append(cur_node.rchild)
深度遍历
先序遍历(preorder)
根–>左–>右
def preorder(self,node):
'''先序遍历'''
if node == None:
return
print(node.elem)
preorder(node.lchild)
preorder(node.rchild)
中序遍历(inorder)
左–>根–>右
def inorder(self,node):
'''中序遍历'''
if node == None:
return
self.inorder(node.lchild)
print(node.elem,end=' ')
self.inorder(node.rchild)
后序遍历(postorder)
左–>右–>根
def postorder(self,node):
'''后序遍历'''
if node == None:
return
self.postorder(node.lchild)
self.postorder(node.rchild)
print(node.elem,end=' ')
由遍历确定一棵树
给定先序、中序或者后序、中序来确定一棵树