zoukankan      html  css  js  c++  java
  • leetcode——99.恢复二叉搜索树

    先中序遍历,对中序遍历得到的数组进行排序,将排序之后的数组与排序之前的数组比较,就可以找到是哪两个数进行了交换。

    再中序遍历二叉树进行节点的值的交换,得到结果。

    但是写得不够简洁,性能并不怎么样。

    public void recoverTree(TreeNode root) {
            ArrayList<Integer> result = inOrder(root);
            int[] a = result.stream().mapToInt(Integer::valueOf).toArray();
            int[] b = Arrays.copyOf(a,a.length);//b是原始顺序
            Arrays.sort(a);//a是排序好的
            //经过比较可找出是哪两个数字进行了位置交换
            int m = MAX_VALUE,n = m;
            for(int i = 0;i<a.length;i++){
                if(b[i] != a[i]){
                    m = b[i];
                    n = a[i]; //找到了交换了的两个数值
                    break;
                }
            }
            //遍历树,找到对应节点,进行交换
            inSearch(m,n,root);
        }
    
        private void inSearch(int m, int n,TreeNode node) {
            if(node == null){
                return;
            }else{
                inSearch(m, n, node.left);
                if(node.val == m){
                    node.val = n;
                }else if(node.val == n){
                    node.val = m;
                }
                inSearch(m,n,node.right);
            }
        }
    
        ArrayList<Integer> list = new ArrayList<>();
        private ArrayList<Integer> inOrder(TreeNode node){
            if(node == null){
                return list;
            }else {
                inOrder(node.left);
                list.add(node.val);
                inOrder(node.right);
            }
            return list;
        }

    Morris中序遍历还是不会。

    ——2020.7.1

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    文件的上传下载
    HttpServletResponse
    HttpServletRequest
    web工程中URL地址的推荐写法
    servlet二
    Servlet
    HTTP-崔希凡笔记
    HTTP协议-引自孤傲苍狼博客
    浏览器与服务器交互的过程
    Tomcat 配置
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13218260.html
Copyright © 2011-2022 走看看