Python版day18

513. 找树左下角的值

 给定一个二叉树的 根节点 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 findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
        queue = deque()
        queue.append(root)
        res = -1
        while queue:
            size = len(queue)
            for i in range(size):
                node = queue.popleft()
                if i==0:
                    res = node.val
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
        return res

 112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/path-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

# 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 hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        if not root:
            return False
        return self.helper(root,0,targetSum)
    def helper(self,node,currSum,targetSum):
        if not node.left and not node.right:
            return targetSum == currSum+node.val
        left,right = False,False
        if node.left:
            left =  self.helper(node.left,currSum+node.val,targetSum)
        if node.right:
            right =  self.helper(node.right,currSum+node.val,targetSum)
        return left or right

 106. 从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

# 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 buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:
        # 如果数组大小为空那么是空结点
        if not postorder:
            return None
        # 后序数组最后一个元素就是中间元素
        rootValue = postorder[-1]
        root = TreeNode(rootValue)
        # 叶子节点
        if len(postorder) == 1:
            return root
        # 中序切割点
        delimiterIndex = inorder.index(rootValue)
        # 切割中序数组
        # 中序左
        inorderLeft = inorder[:delimiterIndex]
        # 中序右
        inorderRight = inorder[delimiterIndex+1:]
        # 切割后序数组
        # 后序数组的左右大小一定跟中序数组相同
        postorderLeft = postorder[:len(inorderLeft)]
        postorderRight = postorder[len(inorderLeft):len(postorder)-1]
        root.left = self.buildTree(inorderLeft,postorderLeft)
        root.right = self.buildTree(inorderRight,postorderRight)
        return root



你可能感兴趣的:(算法,数学建模)