python实现二叉树

在我们解释二叉树之前,首先来看一下树的概念

一、树的概念

树也是一种数据结构,大家可以想象一下,自然界中的树木,树木的叶子就相当于树的结点,那树其实就是N(N>0)个结点的有限集合。其中有一个特殊的结点叫做树根,这个结点没有前趋,除了根结点之外,其余的结点可以看成是M(M>=0)个互不相交的集合,每一个集合又可以看成是一棵树,也就是根的子树。也就是说,树其实就是由有限个子树组成,而且没有次序之分。如下图一所示。

图一

如上图所示,这个树组成了一个有限的集合T={A,B,C,D,E,F,G,H},其中A结点是根结点,它有两颗子树,T1 = {B,D,E,F},以及T2 = {C,G,H},这两个子集互不相交。而T1该子树的根结点是B,它又有子集{D},{E},{F},同理可论证T2.

二、二叉树的概念

首先要注意一个知识点就是二叉树并不是树的特殊情形,他们是两种不同的数据结构。其次,二叉树可以为空,也可以只有左子树,或者右子树,亦或者由一个根结点加上左右两个互不相交的二叉树构成。

下面我们用python实现二叉树,来看看二叉树的实现原则:

1、第一个建立的元素是根结点

接下来我们再来看看二叉树的几种遍历方法:

树的遍历分为深度优先遍历和广度优先遍历,前者有前序、中序、后序,后者有层次遍历。一般来说,深度优先用递归,广度优先用队列。

图2

1、前序遍历

前序遍历是先遍历根结点,再遍历左子树,最后才遍历右子树。根据前序遍历,访问顺序为A->B->D-G,C->E>H,F->I

2、中序遍历

中序遍历是先遍历左子树,再遍历根结点,最后才遍历右子树。访问顺序为G->D->B->A,H->E->C,F->I

3、后序遍历

后续遍历是先遍历左子树,再遍历右子树,最后才遍历根结点。访问顺序是G->D->B->H->E-I->F->C->A

4、层次遍历

层次遍历是指从二叉树的第一层(根结点)开始,从上至下逐层遍历,在同一层中,则按从左到右的顺序对结点逐个访问,访问顺序是A->B->C->D->E->F->G->H->I

下面是实现前3种遍历的python代码,使用遍历

而对于层次遍历需要使用队列,可按如下步骤进行:

(1)初始化一个队列

(2)二叉树的根结点放入队列

(3)重复步骤(4)-(7)直至队列为空

(4)从队列中取出一个结点x

(5)访问结点x

(6)如果x存在左子结点,将左子结点放入队列

(7)如果x 存在右子结点,将右子结点放入队列

下面是代码实现:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 6,529评论 0 14
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 6,782评论 5 14
  • 一、树 1、 树的定义: 树(tree)是n(n>0)个节点的有限集,在任意一棵树中,(1)有且仅有一个特定的称为...
    Qi0907阅读 834评论 0 2
  • 树和二叉树 1、树的定义 树(Tree)是由一个 或 多个结点 组成的有限集合T,且满足: ①有且仅有一个称为根的...
    利伊奥克儿阅读 1,397评论 0 1
  • 简单介绍: SVG在Web上的应用非常广泛,在Android 5.X之前的Android版本上,大家可以通过一些第...
    四会歌神陈子豪阅读 32,771评论 14 56