Exemple #1
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))
                              q: 'TreeNode'):
        self.helper(root, p, q)
        return self.res

    def lowestCommonAncestor4(self, root: 'TreeNode', p: 'TreeNode',
                              q: 'TreeNode'):
        stack, tmp_set, parents = [root], set(), {root: None}
        while p not in parents or q not in parents:
            root = stack.pop()
            if root.left:
                parents[root.left] = root
                stack.append(root.left)
            if root.right:
                parents[root.right] = root
                stack.append(root.right)
        while q:
            tmp_set.add(q)
            q = parents[q]
        while p not in tmp_set:
            p = parents[p]
        return p


if __name__ == '__main__':
    pre_order = [6, 2, 0, 4, 3, 5, 8, 7, 9]
    in_order = [0, 2, 3, 4, 5, 6, 7, 8, 9]
    root = reConstructBinaryTree(pre_order, in_order)
    P = PrintTree()
    P.pre_order(root)
    P.print_tree()