利用Python创建二叉树,并实现前、中、后序遍历
先构建链表块:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
以链表的方式建立二叉树的主程序如下
def Crate_tree(root,val):
newnode=TreeNode(val)
newnode.left=None
newnode.right=None
if root==None:
root=newnode
return root
else:
current=root
while current !=None:
backup=current
if current.val>val:
current=current.left
else:
current=current.right
if backup.val>val:
backup.left=newnode
else:
backup.right=newnode
return root
二叉树有3种遍历方法,前序、中序及后序遍历。
前序遍历的步骤如下:
(1):遍历树根
(2):遍历左子树
(3):遍历右子树
代码如下:
def proorder(ptr):
if ptr != None:
print(ptr.val, end=' ')
proorder(ptr.left)
proorder(ptr.right)
中序遍历的步骤如下:
(1):遍历左子树
(2):遍历树根
(3):遍历右子树
代码如下:
def inorder(ptr):
if ptr != None:
inorder(ptr.left)
print(ptr.val,end=' ')
inorder(ptr.right)
后序遍历的步骤如下:
(1):遍历左子树
(2):遍历右子树
(3):遍历树根
代码如下:
def postorder(ptr):
if ptr != None:
postorder(ptr.left)
postorder(ptr.right)
print(ptr.val, end=' ')
记住遍历方法时有一个技巧:前序遍历时print语句写在最前面;中序遍历时print语句写在中间;后序遍历时print语句写在最后面。
最后运行的主程序如下所示:
if __name__=='__main__':
data=[7,4,1,5,16,8,11,12,15,9,2]
ptr=None
for i in range(len(data)):
ptr=Crate_tree(ptr,data[i])
print('中序遍历结果:')
inorder(ptr)
print('\n前序遍历结果:')
proorder(ptr)
print('\n后序遍历结果:')
postorder(ptr)
运行的结果如下图所示:
由结果可以看出,中序遍历的就是对数组进行从小到达排序。