Exemplo n.º 1
0
                    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])))