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