基于Python的二叉树遍历算法

   今天用Python把二叉树的三种遍历都实现了一遍,用作学习Python的练手程序:

<span style="font-size:14px;">#/usr/bin/python
#coding: utf-8
from collections import deque
#二叉树的节点结构
class Node():
    def __init__(self,data=None,left=None,right=None):
        self.data=data
        self.left=left
        self.right=right

def create_tree(root):
    a=raw_input('please input a data:')
    if a=='#':
        root=None
    else:
        root=Node(data=a)
        print "请输入%s的左孩子:" % root.data
        root.left=create_tree(root.left)
        print "请输入%s的右孩子:" % root.data
        root.right=create_tree(root.right)
    return root
#递归前序遍历
def preorder(root):     
    if root==None:
        return
    else:
        print root.data
        inorder(root.left)
        inorder(root.right)
#非递归先序遍历
def preorder_non(root):
    q=deque([])
    q.append(root)

    while q:
        tem=q.pop()
        print tem.data
        if tem.right!= None:
            q.append(tem.right)
        if tem.left!= None:
            q.append(tem.left)
#递归中序遍历
def inorder(root):
    if root is None:
        return
    else:
        inorder(root.left)
        print root.data
        inorder(root.right)

#非递归中序遍历
def inorder_non(root):
    q=deque([])
    q.append(root)

    while q:
        while root!=None and root.left!=None:
            q.append(root.left)
            root=root.left
        tem=q.pop()
        print tem.data
        if tem.right!=None:
            q.append(tem.right)
        root=tem.right

#递归后序遍历
def postorder(root):
    if root is None:
        return 
    else:
        postorder(root.left)
        postorder(root.right)
        print root.data

#非递归后序遍历
def postorder_non(root):
    q1=deque([])
    q2=deque([])
    result=[]

    q1.append(root)
    while q1:
        tem=q1.pop()
        q2.append(tem)
        if tem.left!=None:
            q1.append(tem.left)
        if tem.right!=None:
            q1.append(tem.right)
    while q2:
        top=q2.pop()
        #print top.data
        result.append(top.data)
    print result

if __name__ =="__main__":
    root=None
    print "创建二叉栿"
    root=create_tree(root)
    print "递归先序遍历"
    preorder(root)
    print "非递归先序遍历"
    preorder_non(root)
    print "递归中序遍历"
    inorder(root)
    print "非递归中序遍历"
    inorder_non(root)
    print "递归后序遍历"
    postorder(root)
    print "非递归后序遍历"
    postorder_non(root)

</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值