513.找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值。
用层序遍历后代码简单的不得了,挺好的,之前没掌握的层序遍历也学会了。
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
#深度最大且最左
stack = deque([root])
result = []
while stack:
l = len(stack)
for _ in range(l):
node = stack.popleft()
if _ == 0:
result.append(node.val)#存入每一行的首元素,即最左节点
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return result[-1]#返回最后一行的最左节点即可
112. 路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
没太理解透,待补充。
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root:
return False
# 此时栈里要放的是pair<节点指针,路径数值>
st = [(root, root.val)]
while st:
node, path_sum = st.pop()
# 如果该节点是叶子节点了,同时该节点的路径数值等于sum,那么就返回true
if not node.left and not node.right and path_sum == sum:
return True
# 右节点,压进去一个节点的时候,将该节点的路径数值也记录下来
if node.right:
st.append((node.right, path_sum + node.right.val))
# 左节点,压进去一个节点的时候,将该节点的路径数值也记录下来
if node.left:
st.append((node.left, path_sum + node.left.val))
return False
106.从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。
注意: 你可以假设树中没有重复的元素。
没想出来,回头补上,确实有难度。