# 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 __init__(self):
self.maxlength = -1
self.res = -1
def traversal(self,root,leftdepth):
if not root:
return 0
if not root.left and not root.right:
if leftdepth > self.maxlength:
self.maxlength = leftdepth
self.res = root.val
self.traversal(root.left, leftdepth+1)
self.traversal(root.right, leftdepth+1)
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
self.traversal(root,0)
return self.res
常规写法可能还是下面这样
python复制代码
# 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:
self.maxlength = -1
self.res = -1
def traversal(root,leftdepth):
if not root:
return 0
if not root.left and not root.right:
if leftdepth > self.maxlength:
self.maxlength = leftdepth
self.res = root.val
traversal(root.left, leftdepth+1)
traversal(root.right, leftdepth+1)
traversal(root,0)
return self.res
# 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:
self.maxdeep = -1
self.depth = 0
self.res = 0
self.traversal(root)
return self.res
def traversal(self, root):
if not root:
return 0
if not root.left and not root.right:
if self.depth > self.maxdeep:
self.maxdeep = self.depth
self.res = root.val
self.depth += 1
self.traversal(root.left)
self.traversal(root.right)
self.depth -= 1
路径总和
使用遍历的思想,遍历所有路径获得加和的数组,交给主函数判断。代码如下。
注意回溯的时候像上传要丢弃当前节点的值,也即 -=root.val
python复制代码
# 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:
self.sumpath = 0
self.res = []
self.traversal(root,self.res)
for i in self.res:
if i == targetSum:
return True
return False
def traversal(self, root, res=[]):
if not root:
return None
self.sumpath += root.val
if not root.left and not root.right:
res.append(self.sumpath)
self.traversal(root.left, self.res)
self.traversal(root.right, self.res)
self.sumpath -= root.val
学习一个分解问题的思路,不断向下检查,到叶子节点时,检查剩余值是否等于该叶子节点值。
python复制代码
class Solution:
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
if not root:
return False
# 如果是叶子节点,检查当前值是否等于剩余目标值
if not root.left and not root.right:
return root.val == targetSum
# 递归检查左右子树
new_target = targetSum - root.val
return self.hasPathSum(root.left, new_target) or self.hasPathSum(root.right, new_target)