力扣刷题 DAY_53 二叉树

Leetcode580

链接:力扣 

题目:

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

说明:树中至少有 2 个节点。

示例1: 

 

输入:root = [4,2,6,1,3]
输出:1

示例2:

 

输入:root = [1,0,48,null,null,12,49]
输出:1

思路:

题目中要求在二叉搜索树上任意两节点的差的绝对值的最小值。注意是二叉搜索树,二叉搜索树可是有序的。
遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了。

BST的中序遍历实际上就是访问这个“有序数组的过程”,因此我们只需中序遍历一遍BST然后逐个计算差值找到最小值即可。

参考代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int result = INT32_MAX;
    void traversal(TreeNode* root, TreeNode* &pre) {
        if (root == nullptr) {
            return;
        }
        traversal(root->left, pre);
        if (pre != nullptr) {
            result = min(result, root->val - pre->val);
        }
        pre = root;
        traversal(root->right, pre);
    }
    int getMinimumDifference(TreeNode* root) {
        TreeNode *pre = nullptr;
        traversal(root, pre);
        return result;
    }
};


版权声明:本文为jgsecurity原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。