513.找树左下角的值
Find Bottom Left Tree Value def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
#my idea:应该要用层序遍历,这样遍历到最后一层,取最左节点的值
#answer = 0
#每次用当前层的首个节点来更新 ans,当 BFS 结束后,ans 存储的是最后一层最靠左的节点。
#queue = [root] 不能这么写,这么写就是list,list是不具备popleft attribute的
queue = deque([root])
ans = 0 #答案是最后一层的第一个节点的值
while queue:
ans = queue[0].val
for _ in range(len(queue)): #pooleft是用于collections的deque中,弹出队首的数
node = queue.popleft()
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return ans
112. 路径总和
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
#①用递归做
if not root:
return False
if root and not root.left and not root.right:
if targetSum == root.val:#如果只有一个节点,那么这个点就是叶子节点,如果等于target就是true
return True
targetSum = targetSum - root.val
return self.hasPathSum(root.left,targetSum) or self.hasPathSum(root.right,targetSum)
#这句code是一个boolean,如果left返回false,它就会去右边recurse
#整棵树里只要有一条path走得通就行
113.路径总和ii
def pathSum(self, root: Optional[TreeNode], targetSum: int) -> List[List[int]]:
#my idea:和112类似,只是需要遍历所有节点,记录下path
#走到最下面一层,也就是左右节点都是空,然后判断targetsum是否为0,是0就是我们要找的path
#照抄的递归方式实现
res,temp = [],[]
def pathsum1(root,target):
if not root:
return
if root.left == None and root.right == None:
if target == root.val:
temp.append(root.val)
res.append(temp[:])
temp.pop()
return
if root.left:
temp.append(root.val)
target = target - root.val
pathsum1(root.left,target)
target += root.val
temp.pop()
if root.right:
temp.append(root.val)
target -= root.val
pathsum1(root.right,target)
target += root.val
temp.pop()
pathsum1(root,targetSum)
return res
105.从前序与中序遍历序列构造二叉树
不懂,以后再看