leetcode 第十七天 2024.8.1

1. 左叶子之和:
 题目链接: 404. 左叶子之和 - 力扣(LeetCode)
应用条件:深度遍历,递归

难点:

递归法:

本题难点在于如果想找左叶子节点,不能从当前节点本身判断,而是要根据他的父节点怕判断这个节点是不是左叶子节点,判断条件为cur.left!=None and cur.left.left == None and cur.left.right == None

个人错误:

由于判断条件过长而不敢往下写。

思路:

如下

# 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 []
        ress =[]
        self.finle(root,ress)
        inres = 0
        for i in ress:
            inres += i
        return inres

        
    def finle(self,cur,res):
        if cur == None:
            return
        if cur.left!=None and cur.left.left == None and cur.left.right == None:
            
            res.append(cur.left.val)
        self.finle(cur.left,res)
        self.finle(cur.right,res)

2. 找树左下角的值:
 题目链接: ​​​​​​​513. 找树左下角的值 - 力扣(LeetCode)
应用条件:层序遍历

难点:

本题很容易想到层序遍历,层序遍历每层再找出最后一层的最左边的元素即可。

个人错误:

思路:

如下

class Solution:
    def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
        if not root:
            return None
        que = deque()
        que.append(root)
        res =[]
        while que:
            resse = []
            for i in range(len(que)):
                cur = que.popleft()
                resse.append(cur.val)
                if cur.right:
                    que.append(cur.right)
                if cur.left:
                    que.append(cur.left)
            res.append(resse)
        
        return res[-1][-1]

 2. 路径总和:
 题目链接: ​​​​​​​112. 路径总和 - 力扣(LeetCode)
应用条件:递归

难点:

本题和前面的所有路径很像一下就想到了,但是非常重要的一点就是在递归方法中不能直接res.append(path)。因为后面涉及到回溯,回溯会改变path数组,从而导致这里也会被改变。所以需要用path【:】创建一个path副本进行储存,这样后面path的回溯操作就不会影响到res里的结果。

个人错误:

思路:

如下

class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        if not root:
            return False
        result = []
        path = []
        finres = []
        self.finPath(root,result,path)
        for i in result:
            summ = 0
            for j in i:
                summ = summ + j
            finres.append(summ)
        if targetSum in finres:
            return True 
        else:
            return False
        
    def finPath(self, cur,res,path):
        path.append(cur.val)
        if cur.left == None and cur.right == None:
            
            res.append(path[:])
            
        if cur.left:
            self.finPath(cur.left,res,path)
            path.pop()
        if cur.right:
            self.finPath(cur.right,res,path)
            path.pop()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值