1. 程式人生 > 實用技巧 >二叉搜尋樹的最小絕對差

二叉搜尋樹的最小絕對差

題目

給你一棵所有節點為非負值的二叉搜尋樹,請你計算樹中任意兩節點的差的絕對值的最小值。

示例:

輸入:

1

\
3
/
2

輸出:
1

解釋:
最小絕對差為 1,其中 2 和 1 的差的絕對值為 1(或者 2 和 3)。

思路

本題要求二叉搜尋樹任意兩節點差的絕對值的最小值,而我們知道二叉搜尋樹有個性質為二叉搜尋樹中序遍歷得到的值序列是遞增有序的,因此我們只要得到中序遍歷後的值序列即能用上文提及的方法來解決。

C++程式碼

#include <bits/stdc++.h>

using namespace std;

struct TreeNode {
    int val;
    TreeNode 
*left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: int ans = INT_MAX; int pre = -1; void inorder(TreeNode *root, int &pre, int ans) { if (root == NULL) return; inorder(root->left, pre, ans);
if (pre == -1) { pre = root->val; } else { ans = min(root->val - pre, ans); pre = root->val; } inorder(root->right, pre, ans); } int getMinimumDifference(TreeNode *root) { inorder(root, pre, ans); return
ans; } };