zoukankan      html  css  js  c++  java
  • LeetCode 783

    https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/

    树的题目一般的思路都是递归实现。但是这次的递归让我懵逼了,没好好利用到BST这个特性,太难了。

    我本来是直接将树中序遍历,然后得到一个数组,再通过这个数组来寻找两两之间最小的那一个,一时傻逼忘记BST的特性,搞了个双重循环来算最小值。。。

    后来我看到别人的题析,发现数组都根本不用存,递归的时候设置一个pre指针指向上一个元素就可以直接计算出来最小值,脑抽风了。。。。

    pre指针是利用了bst左孩子小于根节点,右孩子大于根节点的特性,中序输出的时候将它指向前一个输出的元素就可以很快的计算出来两者间的最小值,又因为bst的特性使得这个最小值不会跨元素出现。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        TreeNode pre = null;
        int max = Integer.MAX_VALUE;
        public int minDiffInBST(TreeNode root) {
            if(root == null){
                return 0;
            }
            dfs(root);
            return max;
        }
    
        private void dfs(TreeNode root){
            if( root == null){
                return;
            }
            dfs(root.left);
            if(pre != null){
                max = Math.min(Math.abs(root.val-pre.val), max);
            }
            pre = root;
            dfs(root.right);
        }
    
    }
  • 相关阅读:
    TCP首部
    IP
    ARP
    QYT教主TCPIP2017 TCP部分 视频笔记
    卷一第二十二章:UDP原理
    卷一第二十一章:TCP原理
    卷一第二十章:IPV6基础
    卷一十九章:DHCP (不涉及工作,暂停)
    目录
    Educational Codeforces Round 90 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/12768109.html
Copyright © 2011-2022 走看看