题解 | 找到搜索二叉树中两个错误的节点

找到搜索二叉树中两个错误的节点

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%内容,订阅专栏后可继续查看/也可单篇购买

小白专属-牛客题解 文章被收录于专栏

专注于牛客平台编程题题解,文字+图解。内容很细,小白友好系列

全部评论
用数组肯定是要O(n)空间的
点赞 回复 分享
发布于 2022-08-02 11:27

相关推荐

11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
5 1 评论
分享
牛客网
牛客企业服务