代码随想录算法训练营第15天

38 阅读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 __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.二叉树的所有路径

# 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 __init__(self):
        self.path=[] #记录traverse函数递归时的路径
        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.左叶子之和

# 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 __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.完全二叉树的节点个数

# 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 __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