算法训练营

代码随想录算法训练营|110.平衡二叉树;257. 二叉树的所有路径;404.左叶子之和

110.平衡二叉树

题目链接: 110.平衡二叉树
文档讲解: 代码随想录
题目难度:中等

思路: 递归法,求解各叶子节点深度差,前序遍历
时间复杂度:O(n);空间复杂度:O(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 getHeight(self, current):
        if current == None:
            return 0
        leftheight = self.getHeight(current.left)
        if leftheight == -1:
            return -1
        rightheight = self.getHeight(current.right)
        if rightheight == -1:
            return -1
        if abs(leftheight - rightheight) <= 1:
            return 1 + max(leftheight, rightheight)
        else:
            return -1
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        if root == None:
            return True
        else:
            height = self.getHeight(root)
            if height == -1:
                return False
            else:
                return True

257. 二叉树的所有路径

题目链接: [257. 二叉树的所有路径](https://leetcode.cn/problems/binary-tree-paths/)
文档讲解: 代码随想录
题目难度:中等
思路: 根节点到所有叶子节点的路径,前序遍历
时间复杂度:O(n);空间复杂度:O(n)
代码如下

# 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 backtracking(self, cur, path, res):
        if cur == None:
            return
        path.append(cur.val)
        if cur.left == None and cur.right == None:
            sPath = '->'.join(map(str, path))   # 列表转换为字符
            res.append(sPath)
            return
        if cur.left:
            self.backtracking(cur.left, path, res)
            path.pop()
        if cur.right:
            self.backtracking(cur.right, path, res)
            path.pop()
        
    def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        if root == None:
            return []
        else:
            res = []
            self.backtracking(root, [],res)
            return res

404.左叶子之和

题目链接: 404.左叶子之和
文档讲解: 代码随想录
题目难度:中等
思路: 左子树左叶子和+右子树左叶子和,因此采用后序遍历
时间复杂度:O(n);空间复杂度:O(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 sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        if root == None:
            return 0
        if root.left == None and root.right == None:
            return 0
        # 后序遍历
        left = self.sumOfLeftLeaves(root.left)
        right = self.sumOfLeftLeaves(root.right)
        if root.left and root.left.left == None and root.left.right == None:
            # 左叶子
            left += root.left.val
        res = left + right
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
邓俊辉教授是计算机科学与技术领域著名的教育家和研究者。他在清华大学担任教授,并负责计算机算法与理论方向的研究和教学工作。邓俊辉教授是中国计算机学会副理事长、国际著名科技出版社Springer中国系列丛书主编、IEICE China Communications主编、Journal of Internet Technology编委、《数据结构与算法教程》作者等。 在邓俊辉教授的指导下,他办了多次Dijkstra算法训练营,旨在培养学生对于算法学习的兴趣与能力。Dijkstra算法是一种用于图论中求解最短路径问题的经典算法,具有广泛的应用领域,如路由算法、网络规划和GPS导航系统等。在训练营中,邓俊辉教授通过讲解算法的原理和思想,引导学生进行编程实践和案例分析,帮助他们深入理解Dijkstra算法的应用场景与实际解决问题的能力。 邓俊辉教授所组织的Dijkstra算法训练营受到了广大学生的欢迎和积极参与。通过训练营的学习,学生不仅可以掌握Dijkstra算法的具体实现过程,还能了解算法设计的思路和应用的局限性。在训练营中,学生还可以与同学们进行交流和合作,共同解决实际问题,促进彼此的学术成长和人际交往能力的培养。 总之,邓俊辉的Dijkstra算法训练营为学生提供了一个系统、全面学习算法知识的平台,帮助他们培养解决实际问题的能力和思维方式。通过这样的培训,学生不仅能在学术领域取得更好的成绩,还可以为将来的职业发展打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值