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

相关文章
|
6月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
6月前
|
存储 算法
leetcode-919:完全二叉树插入器
leetcode-919:完全二叉树插入器
52 0
|
6月前
|
存储 Go
golang力扣leetcode 19.删除链表的倒数第N个结点
golang力扣leetcode 19.删除链表的倒数第N个结点
49 0
|
6月前
|
Java C++ Python
leetcode-222:完全二叉树的节点个数
leetcode-222:完全二叉树的节点个数
30 0
|
6月前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode | 19. 删除链表的倒数第 N 个结点
LeetCode | 19. 删除链表的倒数第 N 个结点
|
1月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
16 0
|
3月前
|
算法
LeetCode第19题删除链表的倒数第 N 个结点
该文章介绍了 LeetCode 第 19 题删除链表的倒数第 N 个结点的解法,通过使用快慢双指针,先将快指针移动 n 步,然后快慢指针一起遍历,直到快指针到达链尾,从而找到倒数第 N 个结点的前一个结点进行删除,同时总结了快慢指针可减少链表遍历次数的特点。
LeetCode第19题删除链表的倒数第 N 个结点
|
3月前
|
Python
【Leetcode刷题Python】222. 完全二叉树的节点个数
LeetCode第222题"完全二叉树的节点个数"的Python代码实现,通过递归和深度优先遍历的方法来计算给定完全二叉树的节点总数。
38 5
|
6月前
leetcode代码记录(完全二叉树的节点个数
leetcode代码记录(完全二叉树的节点个数
29 1