代码随想录算法训练营day12(二叉树)

华子目录

平衡二叉树

思路

  • 什么是平衡二叉树左子树的高度右子树的高度相差不超过1
  • isBalanced用来判断是否为平衡二叉树,如果当前树不是平衡二叉树,直接返回最终结果False。如果当前树为平衡二叉树,就再判断其左右子树左右子树也必须为平衡二叉树
  • cal_depth用来求一个子树的最大深度,这是之前讲过的内容(求最大深度、最小深度、节点个数,都是基础内容
python 复制代码
# 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 cal_depth(self,root):
        cur = root
        if not cur:
            return 0
        leftHeight = self.cal_depth(cur.left)
        rightHeight = self.cal_depth(cur.right)
        height = 1 + max(leftHeight, rightHeight)
        return height
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True
        left_depth = self.cal_depth(root.left)    # 求出左子树的深度
        right_depth = self.cal_depth(root.right)   # 求出右子树的深度
        if abs(left_depth - right_depth) > 1:    # 相差
            return False
        return self.isBalanced(root.left) and self.isBalanced(root.right)

二叉树的所有路径

思路

  • 这道题是使用回溯来求解,第一次接触回溯法,多看看视频来理解。

具体写法

  • 递归的写法里传入三个参数(1)当前处理的节点(2)当前的路径(3)总的结果集
  • 递归的终止条件:当节点叶子节点时,把当前路径加入结果集
  • 递归的单层处理当node有左节点时递归处理左节点处理结束后回溯当node有右节点时递归处理右节点处理结束后回溯
python 复制代码
# 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 travel(self, node, path, res):
        if not node.left and not node.right:   # node为叶子节点
            path = [str(x) for x in path]
            res.append('->'.join(path))   # 将某一条路径加入到总的结果集当中

        if node.left:  # 左有值
            path.append(node.left.val)
            self.travel(node.left, path, res)
            path.pop() # 某一条路线递归结束后,弹出
        if node.right:  # 右有值
            path.append(node.right.val)
            self.travel(node.right, path, res)
            path.pop()  # 某一条路径递归结束后,弹出

    def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        cur = root
        if not cur:
            return []
        res = []   # 记录所有路径
        path = [cur.val]  # 记录当前路径
        self.travel(cur,path, res)
        return res

左叶子之和

思路

  • 使用后序遍历
python 复制代码
# 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:
        if not root:  # 终止条件,当前节点为空
            return 0
        if not root.left and not root.right:  # 终止条件,当前节点是叶子节点
            return 0
        left_num = self.sumOfLeftLeaves(root.left)
        right_num = self.sumOfLeftLeaves(root.right)

        cur_num = 0
        if root.left and not root.left.left and not root.left.right: # # root.left 是左叶子
            cur_num = root.left.val     # 记录左叶子的值

        return cur_num + left_num + right_num  # 三部分的汇总

完全二叉树的节点个数

思路

  • 完全二叉树当成二叉树去计算,使用后序遍历去计算
python 复制代码
# 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:
        cur = root
        if not cur:
            return 0
        left_num = self.countNodes(cur.left)
        right_num = self.countNodes(cur.right)
        result = left_num + right_num + 1   # 核心
        return result
相关推荐
Christo310 分钟前
SIAM-2007《k-means++: The Advantages of Careful Seeding》
大数据·人工智能·算法·机器学习·支持向量机·kmeans
玉笥寻珍32 分钟前
从零开始:Python语言进阶之多态
开发语言·python
缘友一世41 分钟前
PyTorch中TensorBoardX模块与torch.utils.tensorboard模块的对比分析
人工智能·pytorch·python
缘友一世44 分钟前
TensorBoard安装与基本操作指南(PyTorch)
人工智能·pytorch·python
谷晓光1 小时前
在Mac中使用pyenv管理Python版本:从安装到虚拟环境的全流程指南
python·elasticsearch·macos
CAT_cwds1 小时前
使用MybatisPlus实现sql日志打印优化
数据库·python·sql
猛犸MAMMOTH1 小时前
Python打卡第34天
人工智能·python·深度学习
远瞻。2 小时前
【论文精读】2023 AAAI--FastRealVSR现实世界视频超分辨率(RealWorld VSR)
论文阅读·算法·超分辨率重建
是乐谷2 小时前
2025-05-19 代码人生 - 精选文章周刊
人工智能·python·程序人生·面试·职场和发展
悟能不能悟2 小时前
Spring Boot中如何对密码等敏感信息进行脱敏处理
spring boot·后端·python