leetcode_530._二叉搜索树的最小绝对差

给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。

示例 :

输入:

   1
    \
     3
    /
   2

输出:
1

解释:
最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。

注意: 树中至少有2个节点。


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution
{
public:
    int getMinimumDifference(TreeNode* root)
    {
        vector<int> res;
        dfs(root, res);


        int minDif = INT_MAX;
        for (int i = 1; i < res.size(); i++)
            minDif = min(minDif, res[i] - res[i - 1]);
        return minDif;
    }


    void dfs(TreeNode* root, vector<int>& res)
    {
        if (root == NULL)
            return;
        else
        {
            dfs(root->left, res);
            res.push_back(root->val);
            dfs(root->right, res);
        }
    }
};

中序递归调用二叉树

class Solution {
public:
    int getMinimumDifference(TreeNode* root) {
        int minDiff = INT_MAX, pre = -1;
        stack<TreeNode*> stk;
        TreeNode* p = root;      
        while(p || !stk.empty()) {
            while(p) {
                stk.push(p);
                p = p->left;
            }
            p = stk.top();
            stk.pop();
            if(pre != -1) minDiff = min(minDiff, p->val - pre);
            pre = p->val;
            p = p->right;
        }     
        return minDiff;
    }
};
非递归的方法需要借助栈来记录遍历路径上的节点,

猜你喜欢

转载自blog.csdn.net/snow_jie/article/details/80876663
今日推荐