平衡二叉树
给定一个二叉树,判断它是否是 平衡二叉树
平衡二叉树指最高的高度差不能超过1
class Solution:
def isBalanced(self, root) :
if self.get_height(root) != -1:
return True
else:
return False
def get_height(self, root):
# Base Case
if not root:
return 0
# 左
if (left_height := self.get_height(root.left)) == -1:
return -1
# 右
if (right_height := self.get_height(root.right)) == -1:
return -1
# 中
if abs(left_height - right_height) > 1:
return -1
else:
return 1 + max(left_height, right_height)
257 二叉树的所有路径
class Solution(object):
def traversal(self,cur,path,result):#cur表示当前节点,path存储当前路径列表,result存储所有路径的列表
path.append(cur.val) #将当前节点的值添加到path中
if not cur.left and not cur.right: #检查当前节点是否为叶子结点
#如果为叶子结点
sPath = '->'.join(map(str,path)) #将路径转换为字符串格式
result.append(sPath) #将当前路径添加到result中
return
if cur.left:#如果有左节点
self.traversal(cur.left,path,result)#递归左节点
path.pop() #弹出path中的另一个元素,回溯上一个节点
if cur.right:#如果有右节点
self.traversal(cur.right,path,result)#递归右节点
path.pop()#弹出path中的另一个元素,回溯上一个节点
def binaryTreePaths(self, root):
"""
:type root: TreeNode
:rtype: List[str]
"""
result = []
path = []
if not root:
return result
self.traversal(root,path,result)
return result
404 左叶子 之和
这道题目要求左叶子之和,其实是比较绕的,因为不能判断本节点是不是左叶子节点。
此时就要通过节点的父节点来判断其左孩子是不是左叶子了。
class Solution(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
if root.left is None and root.right is None:
return 0
leftValue = self.sumOfLeftLeaves(root.left)
if root.left and not root.left.left and not root.left.right:
leftValue = root.left.val
rightValue = self.sumOfLeftLeaves(root.right)
sum_val = leftValue + rightValue
return sum_val