• leetcode530 二叉搜索树的最小绝对差


    给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
     
    示例:
    输入:
       1
       
         3
        /
       2
    输出:
    1
    解释:
    最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
     
    思路:利用BST中序遍历的性质:中序遍历得到的是一个递增的序列,因此只要求相邻节点的最小值即可。
    需增加一个临时结点用以保存上次访问的结点(递归的临时变量需设置成全局变量)
    增加一个临时变量用以保存最小值
     
    我的代码
    	public int getMinimumDifference(TreeNode root) {
    		List<Integer> list = new ArrayList<Integer>();
    		minDiff(root, list);
    		Collections.sort(list);
    		int min = Integer.MAX_VALUE;
    		for (int i = 0; i < list.size() - 1; i++) {
    			min = Math.min(min, Math.abs(list.get(i) - list.get(i + 1)));
    		}
    		return min;
    	}
    
    	public void minDiff(TreeNode root, List<Integer> list) {
    
    		if (root == null) {
    			return;
    		}
    		list.add(root.val);
    		minDiff(root.left, list);
    		minDiff(root.right, list);
    	}
    

      参考答案

    	TreeNode pre = null;
    	int res = Integer.MAX_VALUE;
    
    	public int getMinimumDifference(TreeNode root) {
    		if (null == root) {
    			return 0;
    		}
    		inorder(root);
    		return res;
    	}
    
    	public void inorder(TreeNode root) {
    		if (root == null) {
    			return;
    		}
    		inorder(root.left);
    		if (null != pre) {
    //			res = Math.min(res, Math.abs(pre.val - root.val));
    			//为什么可以不用求绝对值? 因为中序遍历BST是递增序列
    			res = Math.min(res, Math.abs(root.val - pre.val));
    		}
    
    		pre = root;
    		inorder(root.right);
    	}
    

      

     
  • 相关阅读:
    关于“jdk”版本不支持问题的总结
    Linux系统下jdk卸载安装、配置
    weblogic-jdk 问题
    MCU有哪些复位因素
    MCU固件升级(OTA)的几种Flash划分方式
    003_Linux常用命令之文件操作
    002_Linux常用命令之目录操作
    001_Linux常用命令之ls命令
    dup与dup2函数
    Linux 系统查询机器最近重启时间命令
  • 原文地址:https://www.cnblogs.com/lt123/p/13804067.html
Copyright © 2020-2023  润新知