• 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

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    谷歌三架马车之 The Google File System 中文版
    数据集市 Data Mart
    VMware虚拟机ubuntu下安装VMware Tools步骤
    NOIP普及组 海港 题解
    HXD的DS
    离散化
    哈希表
    状态压缩DP 初探
    《信息学奥赛一本通》大盗阿福 题解
    NOIP 加工零件 题解
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13218260.html
Copyright © 2020-2023  润新知