当前位置: 首页 > article >正文

Day 15 卡玛笔记

这是基于代码随想录的每日打卡

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

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

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

示例 1:

img

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

示例 2:

输入:root = []
输出:0

示例 3:

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

递归法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def countNodes(self, root: Optional[TreeNode]) -> int:
        if root==None:
            return 0
        def count_node(node):
            # 终止条件:节点为None返回0
            if node==None:
                return 0
            # 处理单层逻辑
            leftnum=count_node(node.left)	# 左孩子数量
            rightnum=count_node(node.right)	# 右孩子数量
            return 1+leftnum+rightnum
        return count_node(root)

运行结果

在这里插入图片描述



110. 平衡二叉树

给定一个二叉树,判断它是否是平衡二叉树

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

img

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

递归法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        def getHeight(node):
            # 递归终止条件
            if node==None:
                return 0

            # 单层逻辑
            # 左子树高度
            left=getHeight(node.left)
            # 如果左子树返回-1,则当层直接返回-1
            if left==-1:
                return -1
            # 右子树高度
            right=getHeight(node.right)
            # 如果右子树返回-1,则当层直接返回-1
            if right==-1:
                return -1
            # 如果左右子树都符合条件,计算整体是否符合条件
            if abs(left-right)>1:
                # 如果不符合条件返回给上层-1
                return -1
            else:
                # 如果符合条件,则返回当前节点高度给上一层
                return 1+max(left,right)
        
        res=getHeight(root)
        if res!=-1:
            return True
        else:
            return False

运行结果

在这里插入图片描述



404. 左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

img

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

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

递归法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        def Count(node):
            # 递归终止条件
            if node==None:
                return 0

            # 处理单层逻辑
            # 计算左子树的左叶子之和
            if node.left!=None and node.left.left==None and node.left.right==None:
                leftvalue=node.left.val
            else:
                leftvalue=Count(node.left)
            # 计算右子树的左叶子之和
            rightvalue=Count(node.right)
            return leftvalue+rightvalue
        return Count(root)

运行结果

在这里插入图片描述



257. 二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

示例 1:

img

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

示例 2:

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

递归法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        res=[]
        path=[]
        def traversal(node,res,path):
            # 终止条件
            # 当走到叶子节点时就是终点了
            if node.left==None and node.right==None:
                path.append(node.val)
                res.append('->'.join(map(str,path)))
                return

            # 递归逻辑
            path.append(node.val)

            if node.left:
                traversal(node.left,res,path)
                # 回溯
                path.pop()
            if node.right:
                traversal(node.right,res,path)
                # 回溯
                path.pop()
        traversal(root,res,path)
        return res

运行结果

在这里插入图片描述

有问题欢迎评论或私信


http://www.kler.cn/a/514476.html

相关文章:

  • [Dialog屏幕开发] 屏幕绘制(文本/输入框/按钮控件)
  • FortiGate配置远程拨号VPN
  • TCP断开通信前的四次挥手(为啥不是三次?)
  • RV1126+FFMPEG推流项目(8)AENC音频编码模块
  • vim文本编辑器
  • 使用插件SlideVerify实现滑块验证
  • 30天开发操作系统 第 17 天 -- 命令行窗口
  • Linux下 date时间应该与系统的 RTC(硬件时钟)同步
  • 什么是 Flask 的蓝图(Blueprint)
  • Windows远程连接Docker服务
  • openssl 生成证书 windows导入证书
  • 大数据Hadoop中MapReduce的介绍包括编程模型、工作原理(MapReduce、MapTask、ReduceTask、Shuffle工作原理)
  • RLHF技术应用探析:从安全任务到高阶能力提升
  • 摄影交流平台项目Uniapp+Springboot已完成
  • Spark SQL 中对 Map 类型的操作函数
  • spring cloud之gateway和JWT回顾
  • 用底层逻辑看问题:解锁深度洞察的技巧
  • HTML5 Canvas和JavaScript的3D粒子星系效果
  • 25/1/22 算法笔记<ROS2> TF变换
  • 从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
  • Python中采用.add_subplot绘制子图的方法简要举例介绍
  • NIO 和 Netty 在 Spring Boot 中的集成与使用
  • mapbox加载geojson,鼠标移入改变颜色,设置样式,vue中使用方法
  • 【docker-1】快速入门docker
  • java 根据前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端
  • ELK介绍