目录
一.二叉树的创建
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):
node=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 preoder(self,node):
if node is None:
return
print(node.elem,end="\t")
self.preoder(node.lchild)
self.preoder(node.rchild)
三.中序遍历
def inoder(self,node):
if node is None:
return
self.inoder(node.lchild)
print(node.elem, end="\t")
self.inoder(node.rchild)
四.后序遍历
def postoder(self,node):
if node is None:
return
self.postoder(node.lchild)
self.postoder(node.rchild)
print(node.elem, end="\t")
五.根据遍历结果确定二叉树
1.先序遍历和中序遍历
2.后序遍历和中序遍历
六.二叉树的实现
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):
node=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.pop(0)
print(cur_node.elem,end="\t")
if cur_node.lchild is not None:
queue.append(cur_node.lchild)
if cur_node.rchild is not None:
queue.append(cur_node.rchild)
def preoder(self,node):
if node is None:
return
print(node.elem,end="\t")
self.preoder(node.lchild)
self.preoder(node.rchild)
def inoder(self,node):
if node is None:
return
self.inoder(node.lchild)
print(node.elem, end="\t")
self.inoder(node.rchild)
def postoder(self,node):
if node is None:
return
self.postoder(node.lchild)
self.postoder(node.rchild)
print(node.elem, end="\t")
if __name__=="__main__":
tree=Tree()
tree.add(0)
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(4)
tree.add(5)
tree.add(6)
tree.add(7)
tree.add(8)
tree.add(9)
tree.breadth_travel()
print()
tree.preoder(tree.root)
print()
tree.inoder(tree.root)
print()
tree.postoder(tree.root)
/Users/lichengxiang/Desktop/python/venv/bin/python /Users/lichengxiang/Desktop/python/数据结构和算法/二叉树的实现.py
0 1 2 3 4 5 6 7 8 9
0 1 3 7 8 4 9 2 5 6
7 3 8 1 9 4 0 5 2 6
7 8 3 9 4 1 5 6 2 0
进程已结束,退出代码0