二叉树的实现

本文详细介绍了二叉树的基本结构,包括节点构成、构建方法(如前序遍历),以及深度、节点数量(包括叶子节点和第k层节点)、查找特定值和前序/层序遍历的算法。此外,还讨论了如何通过队列判断一个二叉树是否为完全二叉树。
摘要由CSDN通过智能技术生成

本文章由小编根据自己的理解创作,如有不对,请多指正!

二叉树节点的构成

每一个结点都应该包含一个左指针和一个右指针,还有一个编号

构建二叉树

通过前序遍历的数组构建二叉树,前序遍历的顺序是12##5##(画一棵简单一点的,复杂的不好展示,自己可以多多尝试),其中#代表NULL,那么我们应该怎么样才能构建起这棵二叉树呢?首先我们来画出这棵二叉树

看代码

具体逻辑就在这张图里,比较复杂,大家可以参考这张图自己画一画。

二叉树的深度

求二叉树的深度也就是求他的高度,首先我们肯定是要遍历整个二叉树(递归思想),然后我们不妨这样想,把整个二叉树分为根,左子树,右子树三个部分,然后左子树又可以继续分,右子树也可以继续分,当左子树的深度大于右子树时,我们就返回左子树的深度

看代码


二叉树的节点个数

把整个二叉树遍历一遍,如果遇到NULL就返回0。

二叉树叶子节点的个数

同样的思想也是遍历整个二叉树,如果root为空就返回0,但是如果root的左子树为NULL并且root的右子树也为NULL,则返回1.

二叉树第k层节点个数

看到这个题,我们很多人会去想如何找到第k层并把那一层的元素计数,这里小编提供一种方法

我们不是要找第k层吗?

我就令第一层为第k层,那么第k层是不是就是标数字为1的那一层,我在递归的过程中不断让k-1,如果k == 1时我就让他返回1从未达到计数的目的。

二叉树寻找值为x的节点

寻找值为x的节点,无非就是跟顺序表和链表一样,遍历找到那个节点,但是在二叉树中我们如何返回那个节点呢

二叉树前序遍历

前序遍历的话我们应该按照根,左子树,右子树的顺序去遍历

二叉树的层序遍历

从字面意思上看,就是一层一层地遍历二叉树,具体顺序如下

如果我们想直接实现层序遍历比较困难,但是我们可以通过队列来帮助我们实现,队列的原则是先进先出,那么我们就可以这样,我们先向队列中导入根节点,然后再导入根节点的左子树,再导入右子树,然后再在队列中Pop根节点

判断是否为完全二叉树

之所以放在最后,是因为他也得用到层序遍历的知识,我们可能一开始想到的是利用第k层有多少个节点来判断是否为完全二叉树,但是如果遇到以下的情况这个方法好像就行不通了

因为完全二叉树要求前k-1层都是满的,第k层必须是连续的,我们通过看第k层节点的个数只能判断节点的数量,无法判断他在哪个位置,但是我们再想想刚刚的层序遍历,如果我们把空节点也导入到队列中,那么是不是就意味着我们能够判断他的位置,当第一个空节点出现的时候,如果是完全二叉树,那么后面一定都是空节点,但是如果后面出现了非空节点,就说明他不是完全二叉树,我们来实现这个逻辑

感谢大家!大家有什么好的建议或者好的编程学习方法,小编一定积极收纳。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZENG zhi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值