Python版day17

110. 平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

# 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 self.getHeight(root)!=-1
    def getHeight(self,node):
        if not node:
            return 0
        left = self.getHeight(node.left)
        if left == -1:
            return -1
        right = self.getHeight(node.right)
        if right == -1:
            return -1
        if abs(left-right)>1:
            return -1
        return max(left,right)+1

 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]:
        if not root:
            return []
        res = []
        self.helper(root,res,[])
        return res
    def helper(self,node,res,temp):
        temp.append(node.val)
        if not node.left and not node.right:
            res.append('->'.join(map(str,temp)))
            return
        if node.left:
            self.helper(node.left,res,temp)
            temp.pop()
        if node.right:
            self.helper(node.right,res,temp)
            temp.pop()
        

 404. 左叶子之和

给定二叉树的根节点 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 sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        leftValue = self.sumOfLeftLeaves(root.left)
        rightValue = self.sumOfLeftLeaves(root.right)
        currValue = 0
        if root.left and not root.left.left and not root.left.right:
            currValue = root.left.val
        return leftValue+rightValue+currValue

只能通过父节点来判断左叶子

你可能感兴趣的:(算法)