二叉树是一种重要的数据结构,它由节点组成,每个节点包含一个值以及最多两个指向其子节点的链接(称为左子节点和右子节点)。遍历二叉树意味着按照一定的顺序访问树中的每个节点,并且每个节点仅被访问一次。对于二叉树,有三种常见的遍历方式:先序遍历、中序遍历和后序遍历。
一、首先定义二叉树的结点
class Node:
def __init__(self,data):
self.data=data
self.leftchild=None
self.rightchild=None
二、初始化二叉树
class tree:
def __init__(self):
self.root=Node(None)
def isempty(self):
if self.root.data==None:
return True
else:
return False
三、构建二叉树(先根序)
#构建二叉树
def build_tree(self,node):
data=input('>')
if data=='0':
return
node.data=data
node.leftchild=Node(None)
node.rightchild=Node(None)
self.build_tree(node.leftchild)
self.build_tree(node.rightchild)
通过输入0代表空结点,根据先根序的方法构建二叉树
四、输出二叉树里的内容
先序遍历:先遍历根节点,然后遍历左子树和右子树,在遍历左右子树的过程中同样按照先根,后左子树再右子树的方法
例如:
1
/ \
2 3
/ \
4 5
按照先序遍历结果为:1 2 4 5 3
#二叉树的先序遍历
def print_front(self,node):
if node.data==None:
print('#',end=' ')
return
print(node.data,end=' ')
self.print_front(node.leftchild)
self.print_front(node.rightchild)
中序遍历:现遍历左子树再遍历根节点再遍历右子树
同样的上面的树按照中序遍历的结果为:4 2 5 1 3
#二叉树的中序遍历
def print_middle(self,node):
if node.data==None:
print('#',end=' ')
return
self.print_middle(node.leftchild)
print(node.data,end=' ')
self.print_middle(node.rightchild)
后序遍历:先遍历左子树和右子树再遍历跟结点
按照后序遍历的结果为:4 5 2 3 1
#二叉树的后序遍历
def print_end(self,node):
if node.data==None:
print('#',end=' ')
return
self.print_end(node.leftchild)
self.print_end(node.rightchild)
print(node.data,end=' ')
以下是完整代码
class Node:
def __init__(self,data):
self.data=data
self.leftchild=None
self.rightchild=None
class tree:
def __init__(self):
self.root=Node(None)
def isempty(self):
if self.root.data==None:
return True
else:
return False
#构建二叉树
def build_tree(self,node):
data=input('>')
if data=='0':
return
node.data=data
node.leftchild=Node(None)
node.rightchild=Node(None)
self.build_tree(node.leftchild)
self.build_tree(node.rightchild)
#二叉树的先序遍历
def print_front(self,node):
if node.data==None:
print('#',end=' ')
return
print(node.data,end=' ')
self.print_front(node.leftchild)
self.print_front(node.rightchild)
#二叉树的中序遍历
def print_middle(self,node):
if node.data==None:
print('#',end=' ')
return
self.print_middle(node.leftchild)
print(node.data,end=' ')
self.print_middle(node.rightchild)
#二叉树的后序遍历
def print_end(self,node):
if node.data==None:
print('#',end=' ')
return
self.print_end(node.leftchild)
self.print_end(node.rightchild)
print(node.data,end=' ')
if __name__=='__main__':
a=tree()
a.build_tree(a.root)
print('先序遍历>',end=' ')
a.print_front(a.root)
print()
print('中序遍历>',end=' ')
a.print_middle(a.root)
print()
print('后序遍历>',end=' ')
a.print_end(a.root)
用以下的二叉树为例
最终运行结果为