node2 = node if not node1: node1 = preNode else: break preNode = node node = node.right # 2. Morris 中序遍历 if node1 and node2: node1.val, node2.val = node2.val, node1.val return # @lc code=end if __name__ == "__main__": solution = Solution() root = TreeNode.createBFSTree([0, 1]) solution.recoverTree(root) print(root.serialize()) root = TreeNode.createBFSTree([2, 3, 1]) solution.recoverTree(root) print(root.serialize()) root = TreeNode.createPreOrderTree([3, None, 2, None, 1]) solution.recoverTree(root) print(root.serialize())
res = [] # 1、递归算法 # def inorder(node: TreeNode): # if node.left: # inorder(node.left) # res.append(node.val) # if node.right: # inorder(node.right) # inorder(root) # 2、迭代算法 stack = [] node = root while node or stack: if node: stack.append(node) node = node.left else: node = stack.pop() res.append(node.val) node = node.right return res # @lc code=end if __name__ == "__main__": solution = Solution() print( solution.inorderTraversal(TreeNode.createPreOrderTree([1, None, 2, 3])))