文章目录
一,二叉树的右视图
1,程序简介
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
- 输入: [1,2,3,null,5,null,4]
- 输出: [1,3,4]
示例 2:
- 输入: [1,null,3]
- 输出: [1,3]
示例 3:
- 输入: []
- 输出: []
提示:
- 二叉树的节点个数的范围是 [0,100]
- -100 <= Node.val <= 100
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 5 16:38:10 2022
Function: 二叉树的右视图
@author: 小梁aixj
"""
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def rightSideView(self, root: TreeNode) -> [int]:
if not root:
return []
res = []
curnode = [root]
nexnode = []
res.append(curnode[0].val)
while curnode:
for s in curnode:
if s.right:
nexnode.append(s.right)
if s.left:
nexnode.append(s.left)
if nexnode:
res.append(nexnode[0].val)
curnode = nexnode
nexnode = []
return res
#%%
s = Solution()
print(s.rightSideView([]))
3,运行结果
二,二叉树的层序遍历
1,程序简介
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
- 二叉树:[3,9,20,null,null,15,7],
3
/
9 20
/
15 7
- 返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 5 16:38:01 2022
Function: 二叉树的层序遍历
@author: 小梁aixj
"""
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
queue, res = [root], []
while queue:
size = len(queue)
temp = []
for i in range(size):
data = queue.pop(0)
temp.append(data.val)
if data.left:
queue.append(data.left)
if data.right:
queue.append(data.right)
res.append(temp)
return res
三,滑动窗口最大值
1,程序简介
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
示例 1:
- 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
- 输出:[3,3,5,5,6,7]
- 解释:
滑动窗口的位置 最大值
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
示例 2:
- 输入:nums = [1], k = 1
- 输出:[1]
示例 3:
- 输入:nums = [1,-1], k = 1
- 输出:[1,-1]
示例 4:
- 输入:nums = [9,11], k = 2
- 输出:[11]
示例 5:
- 输入:nums = [4,-2], k = 2
- 输出:[4]
提示:
- 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
- − 1 0 4 < = n u m s [ i ] < = 1 0 4 -10^4 <= nums[i] <= 10^4 −104<=nums[i]<=104
- 1 <= k <= nums.length
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 5 16:36:20 2022
Function: 滑动窗口最大值
@author: 小梁aixj
"""
class Solution(object):
def maxSlidingWindow(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
if len(nums) == 0:
return []
if k == 1:
return nums
res = []
res.append(max(nums[:k]))
for i in range(1, len(nums) - k + 1):
m = max(nums[i : i + k])
res.append(m)
return res
#%%
s = Solution()
print(s.maxSlidingWindow(nums = [4,-2], k = 2))