数据结构与算法(二叉树)

1>前面我们已经讲了线性结构,栈,队列,链表等线性结构,今天我们来讲一下一种非常重要的非线性结构:树

《数据结构与算法(二叉树)》

 解释:你有没有发现非线性结构”树”和我们现实生活中的”树”很相似,这里面每一个点都是树的节点,节点与节点存在这某种关系,比如节点与节点相连接的关系叫做父子节点

《数据结构与算法(二叉树)》

解释:B,C,D的父节点是A,B,C,D被叫做兄弟节点,B,C,D是A的子节点,没有父子节点的节点叫做根节点,如图E,我们把没有子节点的节点叫做叶子节点,比如GHIJKL节点除此之外数据还有深度,高度,层的概念

                       高度:节点到叶子节点的最长路径(边数)

                       深度:根节点到这个节点所经历额边的个数

                      层数:节点的深度+1

                    树的高度:根节点的高度

  这3个概念容易比较混淆,我们必须明确,讨论高度,必须从下到上谈起,且从0为基准开始,讨论深度,必须从上到下谈起,也是以0作为基准.举个列子,一看就明白了

《数据结构与算法(二叉树)》

2>二叉树

   二叉树,顾名思义,每个节点做多有2个叉,一个左节点,一个右节点.,有的二叉树只有左节点,有的二叉树只有右节点,

《数据结构与算法(二叉树)》

   

                     上图是典型的二叉树,不过上图有2个特殊二叉树,2号图为满二叉树,3号图为完全二叉树

                     满二叉树:除了叶子节点,没个节点都有左节点和右节点,这样的二叉树是满二叉树                  

                      完全二叉树:叶子节点都在最第底下的2层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他节点的个数要达到最大,

3>二叉树的存储方式

                  我们先看一下数的链式存储方式,

《数据结构与算法(二叉树)》

                解释:      我们可以很清楚的看到,每个节点都分为3部分,一部分存储数据,另外2部分分别是指向左右节点的指针,我们主要抓住根节点就可以把整个二叉树挂起来.

         基于数组的存储方式 

《数据结构与算法(二叉树)》

   我们把根节点的下标设置为1那么A的左节点的下标为2*i,则右节点的下标为2*i+1,以此类推,B的右子节点的下标为 2*i=4,右节点的下标为2*i+1,我们只要知道根节点的下标,就可以计算出每个节点的下标位置,i/2是它的父节点  2i+1是右节点  2i是左节点.

 根据数组的存储方式,对于完全二叉树来树,根节点的下标是从1开始的,所以他会浪费数组的一个存储空间,即第0个位置

  我们举一个非完全二叉树的列子,我们来看看他在数组中的存储方式

《数据结构与算法(二叉树)》

总结,无疑的是,如果是以个完全的二叉树,使用数组的方式是最节省空间的,用数组来实现完全二茶叉树的存储,只是需要浪费一个存储空间,但是基于链表方式,我们需要更到的内存空间开存储每个节点的指向左右节点的指针,这也是为什么完全二叉树的最后一层的子节点都靠左的原因,为了防止浪费更多的内存空间.

3>二叉树的遍历

      二叉树的遍历右3种方式,分别是前序遍历(根左右),中序遍历(左根右),后续遍历(左右根),遍历的具体操作请进行百度..

    原文作者:数据!您好
    原文地址: https://blog.csdn.net/w5201314ws6123/article/details/86330011
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞