Fork me on GitHub
当你足够期待失望时,你就永远不会失望。

力扣 124. 二叉树中最大路径和

前置

1
2
3
4
5
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def __init__(self):
self.ret = float("-inf")

def maxPathSum(self, root):
def order(node):
if not node:
return 0
left = order(node.left)
right = order(node.right)
self.ret = max(left + node.val + right, self.ret)
cur = node.val + max(0, left, right)
return cur if cur > 0 else 0
order(root)
return self.ret

力扣 114. 二叉树展开为链表

前置

1
2
3
4
5
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def flatten(root):
"""
Do not return anything, modify root in-place instead.
"""
def order(node):
if not node:
return
order(node.left)
order(node.right)
if node.left:
next_ = node.right if node.right else None
node.left, node.right = None, node.left
if next_:
cur = node.right
while cur.right:
cur = cur.right
cur.right = next_
order(root)

力扣 105. 从前序与中序遍历序列构造二叉树

前置

1
2
3
4
5
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

解法

1
2
3
4
5
6
7
def buildTree(preorder, inorder):
if not preorder: return
root = TreeNode(preorder[0])
root_idx = inorder.index(preorder.pop(0))
root.left = self.buildTree(preorder[:root_idx], inorder[:root_idx])
root.right = self.buildTree(preorder[root_idx:], inorder[root_idx + 1:])
return root

力扣 104. 二叉树的最大深度

前置

1
2
3
4
5
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

dfs

1
2
3
4
5
6
7
def maxDepth(root):
# dfs
def dfs(node):
if not node:
return 0
return max(dfs(node.left), dfs(node.right)) + 1
return dfs(root)

力扣 102. 二叉树的层序遍历

前置

1
2
3
4
5
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

bfs

1
2
3
4
5
6
7
8
9
10
11
12
13
def levelOrder(root):
if not root:
return []
res, cur = [], [root]
while cur:
tmp = []
for _ in range(len(cur)):
node = cur.pop(0)
tmp.append(node.val)
if node.left: cur.append(node.left)
if node.right: cur.append(node.right)
res.append(tmp)
return res

力扣 101. 对称二叉树

前置

1
2
3
4
5
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

解法

1
2
3
4
5
6
7
def isSymmetric(root):
def order(left, right):
if not left and not right: return True
if not left or not right: return False
return left.val == right.val and order(left.left, right.right) and order(left.right, right.left)

return order(root, root)

力扣 98. 验证二叉搜索树

前置

1
2
3
4
5
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

前序遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def isValidBST(root):
# 前序遍历
def order(node, lower, upper):
if not node:
return True

val = node.val

if val <= lower or val >= upper:
return False

if not order(node.left, lower, val):
return False
if not order(node.right, val, upper):
return False

return True

ret = order(root, float("-inf"), float("inf"))
return ret
  • Copyrights © 2022 eightyninth
  • Visitors:2822 | Views:3145
  • 小站在各种崩坏中坚持了: 1897天11小时21分10秒

请我喝杯咖啡吧~

支付宝
微信