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

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

http://www.nowcoder.com/practice/4582efa5ffe949cc80c136eeb78795d6

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {

    public class ComparaInteger implements Comparator<Integer> {
        @Override
        public int compare(Integer num1, Integer num2) {
            return num1 - num2;
        }
    }
    /**
     *
     * @param root TreeNode类 the root
     * @return int整型一维数组
     */
    public int[] findError (TreeNode root) {
        // write code here
        ArrayList<Integer> arrayList = new
        ArrayList<>(); // 定义一个 ArrayList,用于存放最终的返回结果
        Stack<TreeNode> stack = new
        Stack<>(); // 定义一个辅助栈,用于实现中序遍历
        Queue<TreeNode> queue = new
        LinkedList<>(); // 定义一个队列,用于存放中序遍历的结果
        TreeNode tmpNode = root; // 定义一个辅助节点
        int tmpValue = 1; // 定义一个计数器

        // 中序遍历初始化
        while (null != tmpNode) {
            stack.push(tmpNode);
            tmpNode = tmpNode.left;
        }

        // 中序遍历的具体实现
        while (!stack.isEmpty()) {
            tmpNode = stack.pop(); // 从栈中弹出一个节点
            queue.add(tmpNode); // 将弹出的节点入队列
            if (null != tmpNode.right) { // 如果弹出的节点的右子树不为空
                tmpNode = tmpNode.right;
                while (null != tmpNode) {
                    stack.push(tmpNode);
                    tmpNode = tmpNode.left;
                }
            }
        }
        while (!queue.isEmpty()) {
            tmpNode = queue.poll();
            if (tmpValue != tmpNode.val) {
                arrayList.add(tmpNode.val);
            }
            tmpValue++;
        }
        arrayList.sort(new ComparaInteger()); // 返回最终结果前,进行排序
        return arrayList.stream().mapToInt(Integer::intValue).toArray();
    }
}
全部评论

相关推荐

一个非常好用的遍历方法
AomaYple:不是指针,是引用
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务