コード例 #1
0
# -*- coding: utf-8 -*-
# @Author  : Jing
# @FileName: 112. Path Sum.py
# @IDE: PyCharm
# https://leetcode.com/problems/path-sum/
from base import reConstructBinaryTree


class Solution:
    def hasPathSum(self, root, sum):
        if not root:
            return False
        sum -= root.val
        if not root.left and not root.right:
            return sum == 0
        return self.hasPathSum(root.left, sum) or self.hasPathSum(root.right, sum)


if __name__ == '__main__':
    preOrder = [5, 4, 11, 7, 2, 8, 13, 4, 1]
    inOrder = [7, 11, 2, 4, 5, 13, 8, 4, 1]
    flag = reConstructBinaryTree(preOrder, inOrder)
    target = 22
    s = Solution()
    print(s.hasPathSum(flag, target))
コード例 #2
0
# -*- coding: utf-8 -*-
# @Author  : Jing
# @FileName: 100. Same Tree.py
# @IDE: PyCharm
# https://leetcode.com/problems/same-tree/
from base import TreeNode, reConstructBinaryTree, PrintTree


class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not p and not q:
            return True
        if not p or not q:
            return False
        if p.val != q.val:
            return False
        return self.isSameTree(p.left, q.left) and self.isSameTree(
            p.right, q.right)


if __name__ == '__main__':
    pre_order = [1, 2, 3]
    in_order = [2, 1, 3]
    root = reConstructBinaryTree(pre_order, in_order)
    p = PrintTree()
    p.pre_order(root)
    p.print_tree()
    s = Solution()
    print(s.isSameTree(root, root))
コード例 #3
0
class Solution:
    def __init__(self):
        self.res = []

    def inorder(self, root):
        if not root:
            return None
        if root.left:
            self.inorder(root.left)
        self.res.append(root.val)
        if root.right:
            self.inorder(root.right)
        return

    def inorderTraversal(self, root):
        self.inorder(root)
        return self.res


if __name__ == '__main__':
    preorder = [1, 2, 3]
    inorder_num = [1, 3, 2]
    root = reConstructBinaryTree(preorder, inorder_num)
    s = Solution()
    print(s.inorderTraversal(root))





コード例 #4
0
# -*- coding: utf-8 -*-
# @Author  : Jing
# @FileName: 111. Minimum Depth of Binary Tree.py
# @IDE: PyCharm
# https://leetcode.com/problems/minimum-depth-of-binary-tree/
from base import reConstructBinaryTree, PrintTree


class Solution(object):
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        left = self.minDepth(root.left)
        right = self.minDepth(root.right)
        left = left if left else right
        right = right if right else left
        return min(left, right) + 1


if __name__ == '__main__':
    pre, inorder = [3, 9, 20, 15, 7], [9, 3, 15, 20, 7]
    root = reConstructBinaryTree(pre, inorder)
    p = PrintTree()
    p.pre_order(root)
    p.print_tree()
    s = Solution()
    print(s.minDepth(root))
コード例 #5
0
                stack.append((n1.right, n2.right))
        return t1

    def mergeTrees2(self, t1, t2):
        if not t1:
            return t2
        elif t2:
            t1.left = self.mergeTrees2(t1.left, t2.left)
            t1.right = self.mergeTrees2(t1.right, t2.right)
            t1.val += t2.val
        return t1


if __name__ == '__main__':
    preOrder1 = [1, 3, 5, 2]
    inOrder1 = [5, 3, 1, 2]
    preOrder2 = [2, 1, 4, 3, 7]
    inOrder2 = [1, 4, 2, 3, 7]
    root1 = reConstructBinaryTree(preOrder1, inOrder1)
    root2 = reConstructBinaryTree(preOrder2, inOrder2)
    p = PrintTree()
    p.pre_order(root1)
    p.print_tree()
    p.pre_order(root2)
    p.print_tree()
    s = Solution()
    root = s.mergeTrees1(root1, root2)
    p.pre_order(root)
    p.print_tree()