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

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    [CF1336C] Kaavi and Magic Spell
    [CF1338C] Perfect Triples
    [CF1353F] Decreasing Heights
    [CF1442B] Identify the Operations
    [CF1354E] Graph Coloring
    [CF1364D] Ehab's Last Corollary
    php-fpm和fastcgi的区别
    phpredis实现互斥锁
    关于lnmp情况下PHP单线程的理解
    客户端断开链接以后 PHP执行过程实测
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13218260.html
Copyright © 2011-2022 走看看