数据结构复习笔记——二叉树的常用接口的实现(c语言)
Posted sjp11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构复习笔记——二叉树的常用接口的实现(c语言)相关的知识,希望对你有一定的参考价值。
二叉树的存储方式
- 顺序结构
顺序结构是用数组进行存储,一般只适用于完全二叉树,普通树的使用会由空间浪费。
2.链式结构
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。
二叉树接口的实现
1.前序遍历
先根遍历 :根先访问
访问顺序: 根->左子树->右子树
对上面的二叉树进行前序遍历,先访问根节点A,然后先访问左子树B,访问B后,再去访问B的左子树D,访问完D后再去访问D的左子树NULL,遇到NULL就返回,再去访问D的右子树NULL,返回,访问B的右子树NULL,返回,再去遍历A的右子树,以此类推,直到右
子树遍历完成。
对上面的二叉树进行前序遍历的访问顺序应为:A->B->D->NULL->NULL->NULL->C->E->NULL->NULL->F->NULL->NULL
下面我们把访问到的值给打印出来:
此处运用了递归的方法,遇到NULL就返回,
2.中序遍历
中根遍历:第二个访问根
访问顺序:左子树->根->右子树
先对A的左子树B访问,访问B树需要先对B的左子树D进行访问,访问D树需要先访问D的左子树NULL,遇到NULL返回,访问D,访问D的左子树,返回,访问B,再访问B的右子树NULL,返回,访问A,再访问A的右子树,以此类推·,直到把右子树访问完毕。
对下面的二叉树进行中根遍历:NULL->D->NULL->B->NULL->A->NULL->E->NULL->C->NULL->F->NULL
3.后序遍历
后根遍历:也就是最后访问根
访问顺序:左子树->右子树->根
对下面的二叉树进行访问的顺序:先访问A的左子树B,访问B树需要先访问B的左子树D,访问D树需要先访问D的左子树NULL,返回,再访问D的右子树NULL,返回,访问D,返回,访问B的右子树NULL,返回,访问B,然后再访问A的右子树,最后再访问根节点A。
顺序:NULL->NULL->D->NULL->B->NULL->NULL->E->NULL->NULL->F->C->A
4.求树中的节点个数
二叉树的节点个数=左子树节点个数+右子树的节点个数+根节点
A树节点个数=B子树节点个数+C子树的节点的个数+1
B树=D子树节点的个数+NULL+1(遇到NULL便返回0)
D树=NULL+NULL+1
所以B子树的节点数=2;以此类推C子树的节点数=3
5.树的叶子节点个数
A树的叶子节点的个数=左子树B的叶子节点的个数+右子树的C的叶子节点的个数
B树的叶子节点的个数=左子树D叶子节点的个数+NULL(D为叶子节点,就直接返回1,NULL返回0)
所以B树的叶子节点的个数=1+0=1
6.层序遍历
层序遍历:对树一层一层的访问,如下:访问A后就对 B C 访问,访问B C 后就对D E F进行访问,直到走到NULL
这时候我们可以借助队列进行操作:
如果还不了解队列的话,可以看我上一篇博客:数据结构复习笔记——队列
链接: 数据结构复习笔记——队列.
7.判断一棵树是否为完全二叉树
判断一颗完全二叉树,需要借助队列,将二叉树中的节点一层一层遍历,但即使左子树和右子树为NULL,则也需要将NULL代进去,如果队头第一个元素为NULL,则跳出遍历,然后判断队列中剩下的节点,如果全为NULL,则说明该树为完全二叉树,如果遇到不是NULL,则说明该数不是为完全二叉树。
如果还不知道什么是完全二叉树的小伙伴们,可以看下这篇博客:
链接: 数据结构复习笔记——树的基本概念及结构.
以下这两种都不是完全二叉树,所以在跳出导入循环后去判断时,队列里面不全都是为NULL,
8.求二叉树的最大深度
完!
以上是关于数据结构复习笔记——二叉树的常用接口的实现(c语言)的主要内容,如果未能解决你的问题,请参考以下文章