代码随想录刷题第十七天
今天题目较难,需要在多回味一下
平衡二叉树 (LC 110)
题目思路:
代码实现:
class Solution(object):
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
res = self.getHeight(root)
if res == -1:
return False
return True
def getHeight(self, node):
if node is None:
return 0
left = self.getHeight(node.left)
right = self.getHeight(node.right)
if left == -1 or right == -1:
return -1
if (abs(left-right) > 1):
return -1
return max(left, right) +1
二叉树的所有路径 (LC 257) 较难
题目思路:
代码实现:
class Solution(object):
def binaryTreePaths(self, root):
"""
:type root: TreeNode
:rtype: List[str]
"""
result = []
path = []
self.traversal(root, path, result)
return result
def traversal (self, node, path, result):
if node.left is None and node.right is None:
strpath = ""
for val in path:
strpath += str(val)
strpath += "->"
strpath += str(node.val)
result.append(strpath)
path.append(node.val)
if node.left is not None:
self.traversal(node.left, path, result)
path.pop()
if node.right is not None:
self.traversal(node.right, path, result)
path.pop()
左叶子之和 (LC 404) 不难但很绕
题目思路:
代码实现:
class Solution(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root is None:
return 0
if root.left is None and root.right is None:
return 0
left = self.sumOfLeftLeaves(root.left) #左
right = self.sumOfLeftLeaves(root.right) #右
# 更新左边的值如果当前位置是“左叶子节点的父节点” (中)
if left == 0 and root.left is not None and root.left.left is None and root.left.right is None:
left = root.left.val
return left+right