树形结构之二叉树的实现篇

        此篇文章不解释二叉树的构造,只解释如何去实现二叉树(学完递归才能学二叉树)

1.二叉树的定义

        二叉树用链表实现比顺序表实现要方便,因为顺序表实现会浪费空间。

        二叉树有三个成员构成,val为此节点的值,left为指向左子树的指针,right为指向右子树的指针

 2.二叉树的实现

        下面图片是二叉树要实现的各种功能

2.1 二叉树的初始化

        关于二叉树的初始化,有两种方法,第一种为纯手搓(自己创建节点并连接),第二种为递归

        初始化成上面这种图 

第一种方法:

        创建与节点数对应的链表,并按照图片中的形状进行连接

第二种方法:

        创建一个数组,用递归的方式进行连接

         各位可以自己画画递归展开图。

2.2二叉树的销毁

        关于二叉树的销毁,要从最下面的节点开始销毁

        

 

       

2.3二叉树前中后序的实现

        前序:根  左子树  右子树

        中序:左子树  根  右子树

        后序:左子树  右子树  根

      通过前中后序,可以实现二叉树的打印和其他功能

前序打印:

        

中序打印:

后序打印:

        前中后序基本差不多。

2.4二叉树的节点个数

        

2.5二叉树的叶子结点个数

        想获得二叉树的叶子节点个数,只需要递归到最下面一层,然后判断此节点的左右节点是否为空,如果左右子树为空,就说明这个节点就是叶子节点,上代码:

2.6二叉树第k层的节点个数

        比如说:我想要第三层的节点个数

        我们只需要不断递归,每向下递归一层,k就减1,直到最后,k = 1的时候,就说明这一层正是我们想要的

        

2.7二叉树的高度

        想要统计二叉树的高度,就得把左右两边的高度统计完,如何在对比哪个更高,返回更高的即可

2.8二叉树查找值为x的节点

        二叉树的查找我们只需要左右遍历,对比一下x的值是否相等,相等就返回即可,要注意接收返回值

       注: 剩下两个功能实现需要队列

2.9二叉树的层序遍历

        所谓的层序遍历就是先把一层的节点全部遍历完,再遍历下一层的节点,要实现这个功能,单单用二叉树是没办法实现的,所以这个层序遍历,我们要用队列+二叉树来实现

        在原有的项目里面添加现有项即可(前提是以前做过队列),具体怎么实现层序遍历,我会在代码中一步步注释

3.0判断是否是完全二叉树

   

        完全二叉树:所有的节点都是相邻的,中间没有NULL节点

        非完全二叉树:所有的节点不一定相连,中间会有空节点(比如:5跟6中间就有一个空节点)

           判断是否是完全二叉树,我们只需要把所有节点先放到队列中(包括NULL),然后一个个删除,遇到空就暂停,如果NULL后面还有节点,则说明不是完全二叉树

代码实现:

        二叉树完!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值