110. 平衡二叉树
题目链接:力扣
思路:dfs
后序遍历,分别求左右子树高度信息返回给中间结点
class Solution:
def isBalanced(self, root: Optional[TreeNode]) -> bool:
def getHeight(cur):
if cur == None:
return 0
leftHeight = getHeight(cur.left)
if leftHeight == -1: return -1 # 若左子树不是平衡树,直接往上一层返回-1,说明已经不是平衡树了
rightHeight = getHeight(cur.right)
if rightHeight == -1: return -1
if abs(rightHeight-leftHeight) > 1: # 高度差大于1
return -1
else:
return max(rightHeight, leftHeight) + 1 # 返回高度当前节点的高度(左右子树高度最大值+1)
if getHeight(root) != -1:
return True
else:
return False
404. 左叶子之和
题目链接:力扣
思路:dfs
设置一个遍历告诉子节点你是否是我的左孩子。
若某结点既是左孩子同时左右孩子为空,说明是左叶子。
class Solution:
res = 0
def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
def dfs(cur, flag): # flag告诉下一层当前节点是否是左孩子
if flag == 1 and cur.left == None and cur.right == None:
self.res += cur.val
return
if cur.left != None:
dfs(cur.left, 1)
if cur.right != None:
dfs(cur.right, -1)
dfs(root, -1)
return self.res