「LeetCode」222-完全二叉树的结点个数⚡️

简介: 「LeetCode」222-完全二叉树的结点个数⚡️

image.png

前言🌧️


算法,对前端人来说陌生又熟悉,很多时候我们都不会像后端工程师一样重视这项能力。但事实上,算法对每一个程序员来说,都有着不可撼动的地位。


因为开发的过程就是把实际问题转换成计算机可识别的指令,也就是《数据结构》里说的,「设计出数据结构,在施加以算法就行了」。


编写指令的好坏,会直接影响到程序的性能优劣,而指令又由数据结构和算法组成,所以数据结构和算法的设计基本上决定了最终程序的好坏


题目🦀


222. 完全二叉树的节点个数


难度中等


给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。


完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。


示例 1:

image.png



输入:root = [1,2,3,4,5,6]
输出:6

示例 2:


输入:root = []
输出:0

示例 3:


输入:root = [1]
输出:1

提示:


  • 树中节点的数目范围是[0, 5 * 104]
  • 0 <= Node.val <= 5 * 104
  • 题目数据保证输入的树是 完全二叉树

**进阶:**遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更快的算法吗?


解题思路🌵


  • 这道题采用遍历结点个数就可以求解
  • 无论是前序还是后序遍历


解题步骤🐂



  • 判断边界条件
  • 初始化dfs
  • 在dfs中如果结点为空则返回0
  • 获取到左右结点的个数
  • 相加并返回,往上回溯


源码🔥


/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var countNodes = function(root) {
    if(!root){
        return 0
    }
    const dfs=(root)=>{
        if(!root){
            return 0
        }
        const left = dfs(root.left)
        const right = dfs(root.right)
        return left+right+1
    }
    return dfs(root)
};

时间复杂度:O(n)


空间复杂度:O(1)


结束语🌞


image.png


那么鱼鱼的LeetCode算法篇的「LeetCode」222-完全二叉树的结点个数⚡️就结束了,算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾,欢迎加我好友,一起沙雕,一起进步

相关文章
|
2月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
2月前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
|
4月前
|
存储 算法
leetcode-919:完全二叉树插入器
leetcode-919:完全二叉树插入器
33 0
|
4月前
|
存储 Go
golang力扣leetcode 19.删除链表的倒数第N个结点
golang力扣leetcode 19.删除链表的倒数第N个结点
31 0
|
4月前
|
Java C++ Python
leetcode-222:完全二叉树的节点个数
leetcode-222:完全二叉树的节点个数
14 0
|
5月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 222. 完全二叉树的节点个数 算法解析
☆打卡算法☆LeetCode 222. 完全二叉树的节点个数 算法解析
|
5月前
leetcode:链表的中间结点
leetcode:链表的中间结点
|
5月前
LeetCode 19. 删除链表的倒数第 N 个结点
LeetCode 19. 删除链表的倒数第 N 个结点
24 0
LeetCode | 19. 删除链表的倒数第 N 个结点
LeetCode | 19. 删除链表的倒数第 N 个结点
|
4天前
leetcode代码记录(完全二叉树的节点个数
leetcode代码记录(完全二叉树的节点个数
7 1