110.平衡二叉树
class Solution:
def __init__(self):
self.balanced=True
def isBalanced(self, root: Optional[TreeNode]) -> bool:
self.cal_depth(root)
return self.balanced
def cal_depth(self,node):
ans=0
if node is None:
return 0
l_depth=self.cal_depth(node.left)
r_depth=self.cal_depth(node.right)
if abs(l_depth-r_depth)>1:
self.balanced=False
return 1+max(l_depth,r_depth)
257.二叉树的所有路径
class Solution:
def __init__(self):
self.path=[]
self.res=[]
def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
self.traverse(root)
return self.res
def traverse(self,root):
if not root:
return
if not root.left and not root.right:
self.path.append(str(root.val))
self.res.append("->".join(self.path))
self.path.pop()
return
self.path.append(str(root.val))
self.traverse(root.left)
self.traverse(root.right)
self.path.pop()
404.左叶子之和
class Solution:
def __init__(self):
self.cnt=0
def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
self.Cal_left_node(root)
return self.cnt
def Cal_left_node(self,node):
if not node:
return 0
if node.left and node.left.left is None and node.left.right is None:
self.cnt+=node.left.val
self.Cal_left_node(node.left)
self.Cal_left_node(node.right)
return self.cnt
222.完全二叉树的节点个数
class Solution:
def __init__(self):
self.cnt=0
def countNodes(self, root: Optional[TreeNode]) -> int:
self.traverse(root)
return self.cnt
def traverse(self,root):
if not root:
return 0
if root:
self.cnt+=1
self.traverse(root.left)
self.traverse(root.right)
return self.cnt