zoukankan      html  css  js  c++  java
  • 恢复二叉搜索树

    1、题目描述:

    https://leetcode-cn.com/problems/recover-binary-search-tree/

    2、思路:

    // 先中序遍历二叉搜索树树,遍历结果的元素应该单调递增
    // 然后找出错误位置的节点
    // 交换连个错误节点的值

    3、代码:

    package 二叉树;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class 恢复二叉搜索树 {
        public static void main(String[] args) {
            TreeNode t1 = new TreeNode(1);
            TreeNode t2 = new TreeNode(3);
            TreeNode t3 = new TreeNode(2);
            t1.left=t2;
            t2.right=t3;
            恢复二叉搜索树 a = new 恢复二叉搜索树();
            a.recoverTree(t1);
        }
    
        // 先中序遍历二叉搜索树树,遍历结果的元素应该单调递增
        // 然后找出错误位置的节点
        // 交换连个错误节点的值
        public void recoverTree(TreeNode root) {
            ArrayList<Integer> travalResult = new ArrayList<>();
            transTree(root, travalResult);
            int[] missTreeNode = getMissTreeNode(travalResult);
            reBuildTree(root, missTreeNode);
        }
    
        // 二叉搜索树的中序遍历结果递增
        public void transTree(TreeNode root, List<Integer> travalResult) {
            if (root == null) {
                return;
            }
            transTree(root.left,travalResult);
            travalResult.add(root.val);
            transTree(root.right,travalResult);
        }
    
        // 2、8、6、7、4、9
        // 2、4、6、7、9
        // 获取错误的两个节点,前一个元素大于后一个元素
        // 第一个前一个元素大于后一个元素的两个数的第一个数是错误元素
        // 第二个前一个元素大于后一个元素的两个数的第二个数是错误元素
        // 考虑特殊情况,两个错误元素是相邻的
        public int[] getMissTreeNode(List<Integer> travalResult) {
            int[] result = new int[2];
            for (int i = 0; i < travalResult.size() - 1; i++) {
                if (travalResult.get(i) > travalResult.get(i + 1)) {
                    if(result[0]==0){
                        result[0]=travalResult.get(i);
                        result[1]=travalResult.get(i+1);
                    }else {
                        result[1]=travalResult.get(i+1);
                    }
                }
            }
            return result;
        }
    
        // 交换二叉树中的两个节点的值
        public void reBuildTree(TreeNode root, int[] missTreeNode) {
            if (root == null) {
                return;
            }
            if (root.val == missTreeNode[0]) {
                root.val = missTreeNode[1];
            }else if(root.val == missTreeNode[1]){
                root.val = missTreeNode[0];
            }
            reBuildTree(root.left, missTreeNode);
            reBuildTree(root.right, missTreeNode);
        }
    
        public static class TreeNode {
            public int val;
            TreeNode left;
            TreeNode right;
    
            public TreeNode(int val) {
                this.val = val;
            }
    
        }
    }

    。。

  • 相关阅读:
    配置eclipse链接hadoop
    hdfs命令总结
    hadoop环境搭建之分布式的建立6
    win10任务视图的时间线历史记录无法删除
    Flask——server.py引入其他python文件
    《架构即未来》阅读笔记3
    msi文件无文件关联,右键打开方式找不到Windows® 安装程序
    bat文件无文件关联,双击无法启动,但可拖进dos窗口运行
    软件无法安装,每次打开安装包都是显示释放安装文件,然后就无反应了
    开始菜单右键打不开,win+x键无反应
  • 原文地址:https://www.cnblogs.com/guoyu1/p/15321041.html
Copyright © 2011-2022 走看看