目录
非递归二叉树前序遍历
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
res = []
stack = [root]
while stack:
root = stack.pop()
res.append(root.val)
if root.right:
stack.append(root.right)
if root.left:
stack.append(root.left)
return res
非递归二叉树中序遍历
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
res, stack = [], []
cur = root
while cur or stack:
if cur:
stack.append(cur)
cur = cur.left
else:
cur = stack.pop()
res.append(cur.val)
cur = cur.right
return res
非递归二叉树后序遍历
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
res = []
stack = [root]
while stack:
node = stack.pop()
res.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return res[::-1]
前序遍历是根左右,后序遍历是左右根,可以在前序遍历时把左右改为右左,最后倒序输出
最大岛屿面积
给定一个由 0 和 1 组成的非空二维数组 grid ,用来表示海洋岛屿地图。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
def bfs(i, j):
size = 0
queue = [(i, j)]
while queue:
indx, indy = queue.pop(0)
if 0<= indx < len(grid) and 0 <= indy < len(grid[0]) and grid[indx][indy] == 1:
grid[indx][indy] = 0
size += 1
queue += [(indx - 1, indy), (indx + 1, indy), (indx, indy - 1), (indx, indy + 1)]
return size
max_size = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == 1:
size = bfs(i, j)
if size > max_size:
max_size = size
return max_size