二叉树的四种遍历(python实现)

二叉树的遍历主要分为以下四种:

先序遍历:【根左右】

中序遍历:【左根右】

后序遍历:【左右根】

层次遍历:从上到下,从左到右

以下图为例:

先序遍历:ABCDEFGHK

中序遍历:BDCAEHGKF

后序遍历:DCBHKGFEA

层次遍历:ABECFDGHK

代码实现:

class Node(object):
    #节点类
    def __init__(self,elem=-1,lchild=None,rchild=None):
        self.elem = elem
        self.lchild = lchild
        self.rchild = rchild
class Tree(object):
    #树类
    def __init__(self):
        self.root = Node()
    def add(self,elem):
        #为树添加节点
        node = Node(elem)
        if self.root.elem == -1:#如果树是空的,则对根节点赋值
            self.root = node
        else:
            myQueue = []
            treeNode = self.root
            myQueue.append(treeNode)
            while myQueue:     #对已有的节点进行层次遍历
                treeNode = myQueue.pop(0)
                if not treeNode.lchild:
                    treeNode.lchild = node
                    return
                elif not treeNode.rchild:
                    treeNode.rchild = node
                else:
                    myQueue.append(treeNode.lchild)
                    myQueue.append(treeNode.rchild)
    def pre_order_recursion(self,root):  #前序遍历
        if not root:
            return
        print(root.elem)
        self.pre_order_recursion(root.lchild)
        self.pre_order_recursion(root.rchild)
    def in_order_recurdion(self,root):   #中序遍历
        if not root:
            return
        self.in_order_recurdion(root.lchild)
        print(root.elem)
        self.in_order_recurdion(root.rchild)
    def post_order_recursion(self,root):  #后序遍历
        if not root:
            return
        self.post_order_recursion(root.lchild)
        self.post_order_recursion(root.rchild)
        print(root.elem)
    def breadth_travel(self,root):#层次遍历
        if not root:
            return
        queue = []
        queue.append(root)
        while queue:
            node = queue.pop(0)
            print(node.elem)
            if node.lchild:
                queue.append(node.lchild)
            if node.rchild:
                queue.append(node.rchild)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值