什么是计算机基础?如果本题能够用二分+二进制+二叉树的方式解出本题,那么我可以认为你的计算机基础就很好了。很久以来,我一直认为自己的计算机基础好,但是自刷题以来,跟网上这么多优秀的同学相比,我发现我实在是弱爆了。所以请认认真真地提升自己的专业能力吧!

1. 题目

【LeetCode】222. 完全二叉树的个数_算法

这是一道好题!

2. 分析

这道题有很多种写法。先说简单的,用递归的方式求解一棵二叉树有多少节点。

2.1 递归求解

使用递归的方法找出当前节点的左子树节点个数,右子树节点个数,那么以当前节点为根的节点个数就求出来了。很显然,这是一个可以使用递归求解的题。复杂度为O(n)

2.2 二分法+树特性+位运算

第二种方法则稍显进阶了。在我为我的秒杀此题而沾沾自喜时,发现竟然还有只需要O(logn * logn)复杂度的算法。

我们都知道 一个正数可以由一棵二叉树可以完整表示, 比如:数字6的二进制位就是110。

【LeetCode】222. 完全二叉树的个数_leetcode_02

3. 代码