用python实现一个二叉树结构,并实现前后后序遍历

class Node():

    def __init__(self, item):
        self.item = item
        self.left = None
        self.right = None


class Tree():

    def __init__(self):
        self.root = None

    def addNode(self, item):

        node = Node(item)

        if self.root == None:
            self.root = node
            return

        cur = self.root
        q = [cur]

        while q:

            nd = q.pop(0)
            if nd.left == None:
                nd.left = node
                return
            else:
                q.append(nd.left)

            if nd.right == None:
                nd.right = node
                return
            else:
                q.append(nd.right)

    def travle(self):

        cur = self.root

        q = [cur]
        while q:
            nd = q.pop(0)

            if nd.left:
                q.append(nd.left)

            if nd.right:
                q.append(nd.right)

    def front(self, root):

        if root == None:
            return

        print(root.item)

        self.front(root.left)
        self.front(root.right)

    def middle(self, root):

        if root == None:
            return

        self.middle(root.left)
        print(root.item)
        self.middle(root.right)

    def behind(self, root):

        if root == None:
            return

        self.behind(root.left)
        self.behind(root.right)
        print(root.item)

t = Tree()

t.addNode(1)
t.addNode(2)
t.addNode(3)
t.addNode(4)
t.addNode(5)
t.addNode(6)
t.addNode(7)

# t.travle()
t.front(t.root)
# t.middle(t.root)
# t.behind(t.root)

前中后序遍历的规律:

    前序:根左右,先遍历根,然后依次遍历左节点里面的节点(以本节点为根,然后按根左右遍历)得到1245,之后遍历右节点里面的节点(以本节点为根,然后按根左右遍历)得到367,故结果为1245367

    中序:左根右,下图可以看成三个节点,把这三个节点按照左根右的方式去遍历,先遍历左边的(245这个)得到425,然后左边这个就遍历完了,之后遍历中间,得到的是4251,左和根都遍历完了要遍历右边,碰到3的时候发现3下面有子节点,就先按照左根右去遍历子节点,得到637,故结果为4251637

    后序:左右根,先遍历左边得到452,然后遍历右边(左右根)673,最后遍历根节点得到1,故结果为4526731

 

其实树的遍历是一种递归的思想

 

上图的前序:1245367

上图的中序:4251637

上图的后序:4526731

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值