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);
    }

}

 

posted @ 2020-04-24 16:09  ZJPang  阅读(130)  评论(0编辑  收藏  举报