代码随想录算法训练营第十七日| LC110:平衡二叉树 LC257:二叉树的所有路径 LC404:左叶子之和

这篇博客介绍了如何使用递归解决平衡二叉树的判断问题,以及二叉树所有路径的获取和左叶子节点之和的计算。提供了具体的Python代码实现,包括`isBalanced`、`binaryTreePaths`和`sumOfLeftLeaves`三个函数,分别用于检查树的平衡状态、获取二叉树的所有路径以及计算左叶子节点的和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LC110:平衡二叉树:

class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        if self.get_height(root) != -1:
            return True
        else:
            return False

    def get_height(self,root:TreeNode) -> int:
        if not root:
            return 0
        if (left_height := self.get_height(root.left)) == -1:   #左
            return -1
        if (right_height := self.get_height(root.right)) == -1:  #右
            return -1
        if abs(left_height - right_height) > 1:   #中
            return -1
        else:
            return 1 + max(left_height, right_height)

递归无敌。-1 表示已经不是平衡二叉树了,否则返回值是以该节点为根节点树的高度。

LC257:二叉树的所有路径:

class Solution:
    def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        path = ''
        res = []
        if not root:
            return res
        self.traversal(root, path, res)
        return res

    def traversal(self, cur: TreeNode, path: str, res: List[str]) -> None:
        path += str(cur.val)
        if not cur.left and not cur.right:
            res.append(path)
        if cur.left:
            self.traversal(cur.left, path + '->', res)
        if cur.right:
            self.traversal(cur.right, path + '->', res)

要有path 和 res 来记录。

LC404:左叶子之和:

class Solution:
    def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        
        left_left_leaves_sum = self.sumOfLeftLeaves(root.left)
        right_left_leaves_sum = self.sumOfLeftLeaves(root.right)

        cur_left_leaf_val = 0
        if root.left and not root.left.left and not root.left.right:
            cur_left_leaf_val = root.left.val

        return cur_left_leaf_val + left_left_leaves_sum + right_left_leaves_sum

注意是左叶子不是左侧节点 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值