题意分析:
- 在做这道题之前,最好是先了解什么是搜索二叉树(BST)
- 左子树的值小于根节点
- 右子树的值大于根节点
- 子树同样满足上述规则
BST:
- 可以参考图解示例:
解法一:递归
- 因为二叉搜索树的中序遍历是正序数组,所以直接进行中序遍历,遍历的过程中直接找出异常值分析结果可得。
- 必然是一个较大的异常值交换到了前面,较小的异常值数放到了后面, 所以遍历的过程中出现的第一个当前值小于前一个值的情况时。
- 前一个值即为要找的较大的异常值,而出现的最后一个 当前值小于前一个值的情况时,当前值才是我们要找的较小的异常值,所以在遍历过程中需要覆盖前面所求的较小值。
Java参考代码:
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类 the root
* @return int整型一维数组
*/
//存储结果集的二维数组
int[] result = new int[2];
int index = 1;
TreeNode preNode;
public int[] findError (TreeNode root) {
// 特判
if(root == null) {
return result;
}
// 递归左子树,寻找该树符合条件的节点
findError(root.left);
if(preNode == null) {
preNode = root;
}
// 判断是否是出错的节点
if(index == 1 && root.val < preNode.val) {
result[index] = preNode.val;
index--;
}
if(index == 0 && root.val < preNode.val) {
res
京公网安备 11010502036488号