数据结构二叉树的遍历代码 树的遍历?

又称二分树,它是有限的节点集合,这个集合或者是空,或者是由一个根节点和两棵互不相交的称为左子树和右子树的二叉树组成。

他和度为2的树是不同的,差别在于

1、度为2的树中至少有一个节点的度为2,而二叉树没有这种要求

2、度为2的数不区分左右子树而二叉树严格区分左右子树。

从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:

⑴访问结点本身(N),

⑵遍历该结点的左子树(L),

⑶遍历该结点的右子树(R)。

以上三种操作有六种执行次序:

前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。

常规的三种递归遍历方法

访问根节点,先序遍历左子树,先序遍历右子树

中序遍历左子树,访问根节点,中序遍历右子树

后序遍历左子树,访问根节点,后序遍历右子树。

关于层次遍历法从上到下从左到右遍历所有节点。

一般而言,先序遍历不会有什么问题,最主要的是中序遍历。

三种遍历结果(可以利用文章提供的算法验证正确性)如下

上面二叉树中序遍历的错误写法:

错误写法的关键在于错误的选择了E(F,G)二叉树作为遍历的起点,实际上我们应该选择D(,tree)作为遍历的起点。[其中tree指的E(F,G)]

中序遍历遍历二叉树的过程是:中序遍历左子树,访问根节点,中序遍历右子树。这表明二叉树的遍历是个递归过程,拿中序遍历的递归算法来说

中序遍历中选取的遍历起点应该是由整棵二叉树根节点一直往左持续延伸最后形成的叶子节点 。

此外 二叉树的中序遍历可以使用投影法来快速解决比如

二叉树遍历的算法源码:

//已建立二叉树根节点
}

树结构是一种描述非线性层次关系的数据结构

在一个数结构中,有且仅有一个结点没有直接前驱,这个结点就是树的结点。

除根结点外,其余每个结点有且仅有一个直接前驱。

每个结点可以有任意多个直接后继。

根:有且仅有一个无直接前驱结点的结点

结点的度:结点拥有的子数的数量叫做结点的度

树的度:树内结点的度的最大值

结点的层:从根算起。根为第一层,往下则+1层

树的深度:树的最大层数

森林:去掉根结点所得子数的个数

结点最多只有两个儿子,叫做二叉树

第i层上最多有2^(i-1)个结点

深度为k的的二叉树最多有2^k - 1个结点

N0表示叶结点个数,N2表示度为2的非叶结点个数,那么N0=N2+1

顺序存储:一般通过结构数组进行存储

链式存储:存储结构包含结点元素及分别指向左子树和右子树的引用

先序遍历:1.访问根结点 2.访问椰子树 3.访问右子树

中序遍历:1.访问左子树 2.访问根结点 3.访问右子树

后序遍历:1.访问左子树 2.访问右子树 3.访问根结点

层次遍历:从根结点开始,向下一层一层访问,每层从左到右访问每个结点

如何具体实现?首先需要分析,二叉树遍历的核心问题,需要存储结构保存暂时不访问的结点,可以借助其他数据结构完成,如队列、堆栈

二叉树的先、中、后序递归遍历

核心思想:使用堆栈,先进后出

核心思想:使用队列,先进先出,首先根结点入队,当结点出队,访问该结点、将其左右儿子入队

}

双亲表示法,孩子表示法和兄弟表示法。

这里我们使用指针式的孩子表示法。

前序遍历,后序遍历,层序遍历(二叉树还有中序遍历)

按前序遍历顺序建立一颗树:

}

我要回帖

更多关于 数据结构二叉树的遍历代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信