给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。
示例 :
输入: 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;
}
};
非递归的方法需要借助栈来记录遍历路径上的节点,