# -*- 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))
# -*- 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))
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))
# -*- 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))
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()