Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Example 1:
1 | Input: [1,3,null,null,2] |
Example 2:
1 | Input: [3,1,4,null,null,2] |
Follow up:
- A solution using O(n) space is pretty straight forward.
- Could you devise a constant space solution?
题意分析
给定一个二叉搜索树,其中两个节点的位置被错误放置。让我们找到这两个节点并将其交换使之成为一个合法的二叉搜索树。分析可知,二叉搜索树的中序遍历应该是递增序的,我们将给定输入的树进行中序遍历,有两种可能存在的情况:其一是两个错误的元素紧邻放置,那么中序遍历的结果中只有这两个错误的邻居元素是逆序的;其二是两个错误的元素不相邻,那么中序遍历结果中会存在两个逆序。如3 25 7 8 10 15 20 5
,其中的25和5,这两个需要做交换使之成为3 5 7 8 10 15 20 25
。其中25和5是应当做交换的非紧邻元素,那么我们可以发现25大于7,20大于5这两对逆序,并取第一个逆序的第一个元素和第二个逆序的第二个元素做交换。而在3 5 8 7 10 15 20 25
这一个紧邻元素需要做交换的例子中,我们并不存在第二个逆序对,所以只需要找到唯一的逆序对,将其做交换即可。
代码实现
1 | /** |