leetcode 第十四天 2024.3.27

1. 二叉数的层序遍历:
 题目链接: 102. 二叉树的层序遍历 - 力扣(LeetCode)
应用条件:层序遍历


难点:

二叉树的层序遍历和递归遍历不一样,层序遍历实现的是一层一层全部遍历,层序遍历的难点就是要想到可以用队列来实现层序遍历的操作。将遍历到的代码放入队列中,并记录此层所有的节点个数为size,然后一个一个弹出,弹出的同时将这个节点的左右子节点都加入到队列中,弹出一个节点size减一,直到size为0,这时这一层的所有节点都已经弹出,然后我们重新获取size,此时的size就是下一层的所有节点个数。周而复始直到队列中没有节点了,就代表全部遍历完了

个人错误:

在将节点的左右子节点放入队列时忘记判断当前节点左右子节点是否存在。

思路:

如下

# 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 levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        res =[]
        que = deque()
        if not root:
            return res
        else:
            que.append(root)
        while que:
            size = len(que)
            curres = []
            for i in range(size):
                cur = que.popleft()
                curres.append(cur.val)
                if cur.left:
                    que.append(cur.left)
                if cur.right:    
                    que.append(cur.right)
            res.append(curres)
        return res

 2. 二叉数的层序遍历二:
 题目链接: 107. 二叉树的层序遍历 II - 力扣(LeetCode)
应用条件:层序遍历


难点:

和上一道题基本思路一致,只需要把返回结果reverse就行了

个人错误:

无。

思路:

如下

# 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 levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:
        res =[]
        que = deque()
        if not root:
            return res
        else:
            que.append(root)
        while que:
            size = len(que)
            curres = []
            for i in range(size):
                cur = que.popleft()
                curres.append(cur.val)
                if cur.left:
                    que.append(cur.left)
                if cur.right:    
                    que.append(cur.right)
            res.append(curres)
        return res[::-1]

 3. 二叉数的右视图:
 题目链接:199. 二叉树的右视图 - 力扣(LeetCode)
应用条件:层序遍历


难点:

和上一道题基本思路一致,不用把每个节点都加入结果数组中,只需要判断当前节点是不是本层中最后一个节点,是最后一个节点将其加入到返回数组,不是则跳过。

个人错误:

无。

思路:

如下

# 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 rightSideView(self, root: Optional[TreeNode]) -> List[int]:
        res =[]
        que = deque()
        if not root:
            return res
        else:
            que.append(root)
        while que:
            size = len(que)
            curres = []
            for i in range(size):
                cur = que.popleft()
                if i == size-1:
                    res.append(cur.val)
                if cur.left:
                    que.append(cur.left)
                if cur.right:    
                    que.append(cur.right)
        return res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值