110.平衡二叉树
class Solution:
def TreeDeep(self, cur: TreeNode) -> int:
if not cur:
return 0
leftDeep = self.TreeDeep(cur.left)
if leftDeep == -1:
return -1
rightDeep = self.TreeDeep(cur.right)
if rightDeep == -1:
return -1
if abs(leftDeep - rightDeep) > 1:
return -1
else:
return 1 + max(leftDeep, rightDeep)
def isBalanced(self, root: TreeNode) -> bool:
if self.TreeDeep(root) != -1:
return True
else:
return False
257. 二叉树的所有路径
class Solution:
def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
path = ""
res = []
self.Traversal(root, path, res)
return res
def Traversal(self, root: Optional[TreeNode], path: str, res: List[str]):
path += str(root.val)
if not root.left and not root.right:
res.append(path)
if root.left:
self.Traversal(root.left, path + '->', res)
if root.right:
self.Traversal(root.right, path + '->', res)
回溯
404.左叶子之和
class Solution:
def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
# 终止条件1 节点为空
if not root:
return 0
# 终止条件2 节点为叶子节点
if root.left == None and root.right == None:
return 0
# 处理左节点
leftsum = self.sumOfLeftLeaves(root.left)
if root.left != None and root.left.left == None and root.left.right == None:
leftsum = root.left.val
# 处理右节点
rightsum = self.sumOfLeftLeaves(root.right)
# 返回左叶子节点和
return leftsum + rightsum