1.110. 平衡二叉树
给定一个二叉树,判断它是否是 平衡二叉树
代码实现
# 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 isBalanced(self, root: Optional[TreeNode]) -> bool:
return False if self.getHeight(root) == -1 else True
def getHeight(self, root: Optional[TreeNode]) -> int:
if not root: return 0
left_height = self.getHeight(root.left)
right_height = self.getHeight(root.right)
if left_height == -1 or right_height == -1 or abs(left_height - right_height) > 1:
return -1
return max(left_height, right_height) + 1
2. 257. 二叉树的所有路径
给你一个二叉树的根节点 root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
代码实现:
# 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 binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
res = []
path = ''
def recur(root:Optional[TreeNode], path: str) -> None:
if not root:return
path += str(root.val)
if not root.left and not root.right:
res.append(path)
if root.left:
recur(root.left, path + '->')
if root.right:
recur(root.right, path + '->')
recur(root, path)
return res
3. 404. 左叶子之和
给定二叉树的根节点 root
,返回所有左叶子之和。
思路:
-
一定要明白左叶子节点的定义:当前节点的左子节点非空,且左子节点的左右孩子节点都是空的(即 左 叶子 节点)
-
遍历方式其实都okay
代码实现
# 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 sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
#函数返回的是所有左叶子节点的和
#首先是终止边界条件,有俩
if not root: return 0
if root.left and not root.left.left and not root.left.right:
left_value = root.left.val
else:
left_value = self.sumOfLeftLeaves(root.left)
return left_value + self.sumOfLeftLeaves(root.right)