513. 找树左下角的值:
代码思路
迭代法
# 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 findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
from collections import deque
queue = deque()
queue.append((0, root))
temp_left_node = (0, root)
while len(queue) != 0:
node = queue.popleft()
if node[1]:
l_node = (node[0]+1, node[1].left)
r_node = (node[0]+1, node[1].right)
if l_node[1]:
if temp_left_node[0] < l_node[0]:
temp_left_node = l_node
elif r_node[1]:
if temp_left_node[0] < r_node[0]:
temp_left_node = r_node
else:
if temp_left_node[0] < node[0]:
temp_left_node = node
if l_node[1]:
queue.append(l_node)
if r_node[1]:
queue.append(r_node)
return temp_left_node[1].val
112. 路径总和:
代码思路
# 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 hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
if not root:
return False
def dfs(node, sum):
if node.left == None and node.right == None:
if sum == targetSum:
return True
else:
return False
elif node.right == None:
temp_sum = sum + node.left.val
return dfs(node.left, temp_sum)
elif node.left == None:
temp_sum = sum + node.right.val
return dfs(node.right, temp_sum)
else:
temp_left_sum = sum + node.left.val
temp_right_sum = sum + node.right.val
return dfs(node.left, temp_left_sum) or dfs(node.right, temp_right_sum)
return dfs(root, root.val)
106. 从中序与后序遍历序列构造二叉树:
代码思路
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
def helper(in_left, in_right):
# 如果这里没有节点构造二叉树了,就结束
if in_left > in_right:
return None
# 选择 post_idx 位置的元素作为当前子树根节点
val = postorder.pop()
root = TreeNode(val)
# 根据 root 所在位置分成左右两棵子树
index = idx_map[val]
# 构造右子树
root.right = helper(index + 1, in_right)
# 构造左子树
root.left = helper(in_left, index - 1)
return root
# 建立(元素,下标)键值对的哈希表
idx_map = {val:idx for idx, val in enumerate(inorder)}
return helper(0, len(inorder) - 1)