Ejemplo n.º 1
0
            return
        stack = []
        res, first, second = None, None, None
        node = root
        while True:
            while node:
                stack.append(node)
                node = node.left
            if not stack:
                break
            tmp_node = stack.pop()
            if res and res.val > tmp_node.val:
                if not first:
                    first = tmp_node
                second = res
            res = tmp_node
            node = tmp_node.right
        first.val, second.val = second.val, first.val
        return root


if __name__ == '__main__':
    preOrder = [3, 1, 4, 2]
    inOrder = [1, 3, 2, 4]
    root = reConstructBinaryTree(preOrder, inOrder)
    s = Solution()
    p = PrintTree()
    root = s.recoverTree1(root)
    p. in_order(root)
    print(p.res)
Ejemplo n.º 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))
                              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()