博文中会简要介绍Leetcode P0099题目分析及解题思路。
“Recover Binary Search Tree”是一道比较经典的考察二叉搜索树(Binary Search Tree,BST)性质的问题。关于BST的性质,我们知道对于在BST上的任意一个树结点,其值要大于它左子树的最大值,小于其右子树的最小值,而且它的中序遍历后的序列是一个递增序列。根据这些性质我们就可以还原一个二叉搜索树。
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Example 1:
最基本的思路是,先通过中序遍历得到一个数组,根据BST的性质,这个数组本应该是递增有序的数组,但是由于我们调换了其中两个树结点的值,在现在这个数组中将会存在最多两个极大值点或者说极小值点(不含两端),假设为k个。我们很容易地可以发现,第1个极大值点的值和第k-1个极小值点的值是被调换的两个值,那么我们得到这两个树结点以后,再调换值即可还原二叉搜索树。
以下是Java的题解代码实现。
以下是C++的题解代码实现。