题解 | 找到搜索二叉树中两个错误的节点
找到搜索二叉树中两个错误的节点
http://www.nowcoder.com/practice/4582efa5ffe949cc80c136eeb78795d6
题意分析:
- 在做这道题之前,最好是先了解什么是搜索二叉树(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) {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
小白专属-牛客题解 文章被收录于专栏
专注于牛客平台编程题题解,文字+图解。内容很细,小白友好系列