已知一棵完全二叉树,求其节点的个数

本文探讨了一种优化遍历算法的方法,利用满二叉树的特性加速过程。通过分析右子树的左边界,可以确定左子树是否为满二叉树,进而计算节点个数。当右子树的最左节点到底层时,时间复杂度降低,每层只需检查一个节点。文章深入讨论了不同情况下的时间复杂度,并介绍了如何通过递归处理完全二叉树。
摘要由CSDN通过智能技术生成

在这里插入图片描述

遍历算法时间复杂度是O(N),而遍历是低于O(N)的

我们可以利用满二叉树的结点个数为 2^h-1 (h为树的层数)来加速这个过程。

我们用h总 纪录变量最深到了哪一层
然后遍历x右子树的左边界
在这里插入图片描述
我们看右子树的左边界有没有到达最后一层

如果x的右子树的左边界已经到达最后一层
那么x的左子树就是满的 !
在这里插入图片描述
且左子树高度为h总-1

同时,因为左子树是满的,所以,其节点个数为 2^(h总-1)-1

算上根节点,其总的节点数为 2^(h总-1)

此时,根的右子树为完全二叉树,和母问题一致!可以用到递归了!

在这里插入图片描述
若右子树的左边界没有到最后一层,如下所示:
在这里插入图片描述
此时,右子树是满的!
是高度为2的满二叉树(比左树满的时候的高度要减1)
所以此时右树的节点是
在这里插入图片描述
此时,总的节点个数就是
在这里插入图片描述
而此时,左二叉树是一棵完全二叉树,接下来递归他!在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
返回值是 以当前节点 node为头的 整棵树的 节点个数

在这里插入图片描述
复杂度怎么求:
在这里插入图片描述

遍历1节点是时候,发现右子树的最左节点已经到底了
在这里插入图片描述
每一层遍历的节点个数只有一个!
那么一共有多少层呢!
一共有

在这里插入图片描述
这么多个节点

每个节点要遍历其边界,
时间复杂度为
在这里插入图片描述
所以总的时间复杂度为:
在这里插入图片描述

初级5 02.44.37开始讲的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值