脚本宝典收集整理的这篇文章主要介绍了Recover Binary Search Tree@LeetCode,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Recover Binary Search Tree
根据BST
树的特性来,对BST
的中序遍历,得到的是一个升序数列。所以在遍历过程中检测出两个异常的位置,对其进行交换即可。
一旦有两个位置的节点被交换了,那么中序遍历就会出现有两个:Node[i] > Node[i + 1]
其中i
是错误位置,Node[j] < Node[j - 1]
其中j
是错误位置,遵循这个规律,找到相应的Node[i]
和Node[j]
对其进行交换(只交换val
值)即可。
实现代码如下:
public class Solution {
private TreeNode wrongLessNode;
private TreeNode wrongLargerNode;
private TreeNode preNode;
public void recoverTree(TreeNode root) {
recover(root);
if (wrongLessNode != null && wrongLargerNode != null) {
int temp = wrongLessNode.val;
wrongLessNode.val = wrongLargerNode.val;
wrongLargerNode.val = temp;
}
}
private void recover(TreeNode root) {
if (root == null)
return;
if (preNode == null && root.left == null) {
preNode = root;
}
recover(root.left);
if (preNode != null && root.val < preNode.val) {
if (wrongLessNode == null) {
wrongLessNode = preNode;
wrongLargerNode = root;
}
else {
wrongLargerNode = root;
return;
}
}
preNode = root;
recover(root.right);
}
}
以上是脚本宝典为你收集整理的Recover Binary Search Tree@LeetCode全部内容,希望文章能够帮你解决Recover Binary Search Tree@LeetCode所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。