110.平衡二叉树 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
提醒
再一次涉及到,什么是高度,什么是深度,可以巩固一下
class Solution:
def isBalanced(self, root: Optional[TreeNode]) -> bool:
if self.get_height(root) != -1:
return True
else:
return False
def get_height(self, root: TreeNode) -> int:
# Base Case
if not root:
return 0
# 左
left_height = self.get_height(root.left)
if (left_height) == -1:
return -1
# 右
if (right_height := self.get_height(root.right)) == -1:
return -1
# 中 abs是返回一个数字的绝对值
if abs(left_height - right_height) > 1:
return -1
else:
return 1 + max(left_height, right_height)
257. 二叉树的所有路径 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
提醒
第一次接触到回溯的过程, 视频里重点讲解了 本题为什么要有回溯,已经回溯的过程。
如果对回溯 似懂非懂,没关系, 可以先有个印象。
class Solution:
def traversal(self, cur, path, result):
#本题 中的位置特殊,放在终止条件之前
path.append(cur.val) # 中
if not cur.left and not cur.right: # 到达叶子节点
sPath = '->'.join(map(str, path))
result.append(sPath)
return
if cur.left: # 左
self.traversal(cur.left, path, result)
path.pop() # 回溯
if cur.right: # 右
self.traversal(cur.right, path, result)
path.pop() # 回溯
def binaryTreePaths(self, root):
result = []
path = []
if not root:
return result
self.traversal(root, path, result)
return result
404.左叶子之和 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
提醒
其实本题有点文字游戏,搞清楚什么是左叶子,剩下的就是二叉树的基本操作
还需要通过父节点来判断子节点是否为符合条件的节点
class Solution:
def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
if root is 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