python数据结构之树(2)—— 二叉树遍历|CSDN创作打卡

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、遍历的分类

1、深度遍历

先序遍历

中序遍历

后序遍历

2、广度遍历

层序遍历

二、python实现二叉树先序遍历

三、python实现二叉树中序遍历

四、python实现二叉树后序遍历

五、python实现二叉树层序遍历

六、具体调用


一、遍历的分类

1、深度遍历

沿着树的深度遍历树的节点,尽可能深的搜索树的分支。

其中先序遍历,中序遍历,后序遍历属于深度遍历,一般用用递归来实现。

先序遍历

若二叉树为空,为空操作;

否则(1)访问根节点;(2)先序遍历左子树;(3)先序遍历右子树。

以下图为例:

先序遍历为:1,2,3,5,4,6,7,8,9

中序遍历

若二叉树为空,为空操作;

否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。

同样的以此为例:

中序遍历为:5,3,2,4,1,9,8,6,7

后序遍历

若二叉树为空,为空操作;

否则(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。

同样的以此为例:

后序遍历为:5,3,4,2,9,8,7,6,1

2、广度遍历

从树的根层级开始一层一层的遍历,遍历完上一层再遍历下一层。

而层序遍历则属于广度遍历,一般用队列来实现。

层序遍历

若二叉树为空,为空操作;

否则从上到下、从左到右按层次进行访问。

同样的以此为例:

层序遍历为:1,2,6,3,4,7,8,5,9


二、python实现二叉树先序遍历

利用递归实现

    def preorder(self,root): #先序遍历
        if not root:
            return 
        else:
            print(root.data)
            self.preorder(root.lchild)
            self.preorder(root.rchild)

三、python实现二叉树中序遍历

    def inorder(self, root): #中序遍历
        if not root:
            return
        self.inorder(root.lchild)
        print(root.data)
        self.inorder(root.rchild)

四、python实现二叉树后序遍历

    def nextorder(self,root): #后序遍历
        if not root:
            return
        self.nextorder(root.lchild)
        self.nextorder(root.rchild)
        print(root.data)

五、python实现二叉树层序遍历

其实这个就是我们上一篇介绍的printtree()

    def printtree(self): #输出整棵树(层序遍历)
        if self.isEmpty():
            return None
        else:
            queue = [self.root]
            while queue:
                cur = queue.pop(0)
                print(cur.data)
                if cur.lchild and cur.rchild:
                    queue.append(cur.lchild)
                    queue.append(cur.rchild)
                elif not cur.lchild and cur.rchild:
                    queue.append(cur.rchild)
                elif not cur.rchild and cur.lchild:
                    queue.append(cur.lchild)

六、具体调用

k.printtree()
k.preorder(k.root)
k.inorder(k.root)
k.nextorder(k.root)

欢迎大家在评论区批评指正,谢谢大家~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tt丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值