链接: https://leetcode-cn.com/problems/recover-binary-search-tree
题意
给定一个二叉查找树,已知有两个节点被不小心交换了,试复原此树。
解法
利用二叉查找树的中序遍历有序性
找到不符合条件的节点进行交换
每次记录prev节点
这里一开始写的时候陷入了一个困境
即如何记录prev节点 想的时候想错了
误把遍历时候访问的节点当成了prev节点
最后使用全局变量的方式 每次中序遍历访问的节点
出现顺序不符的情况有两种,一种是遍历整个过程出现一次次序错误,还有一种是两次次序错误
如果一次,则说明这两个节点需要交换
如果两次,则交换这两个节点
要注意交换的这两个节点分别是第一个的prev和第二个root(这里一开始也卡住了)
细节见代码
代码
1 | class Solution { |