- 二叉搜索树的最小绝对差
犯了一些错误
本来写的代码是这样的
/**
* 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:
TreeNode* preNode = NULL;
int minVal=INT_MAX;
int getMinimumDifference(TreeNode* root) {
//结束条件
if (root == NULL) {
return -1;
}
//中序遍历
if (root->left) {
minVal = min(minVal, getMinimumDifference(root->left));
}
if (preNode != NULL) {
minVal = min(minVal, root->val - preNode->val);
}
preNode=root;
if (root->right) {
minVal = min(minVal, getMinimumDifference(root->right));
}
return minVal;
}
};
实际上,我的对于子节点的处理和管理等等一系列的操作,应该都统一到我的中间节点的处理上,我的左遍历和右遍历应该只负责调用函数就可以,内部处理的逻辑应该交给中间节点来处理
/**
* 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:
TreeNode* preNode = NULL;
int minVal=INT_MAX;
int getMinimumDifference(TreeNode* root) {
//结束条件
if (root == NULL) {
return -1;
}
//中序遍历
getMinimumDifference(root->left);
if (preNode != NULL) {
minVal = min(minVal, root->val - preNode->val);
}
preNode = root;
getMinimumDifference(root->right);
return minVal;
}
};
迭代写法
int getMinimumDifference(TreeNode* root) {
stack<TreeNode*> stk;
if (root) stk.push(root);
TreeNode* preNode = NULL;
int minVal=INT_MAX;
while (!stk.empty()) {
TreeNode* node = stk.top();
stk.pop();
if (node != NULL) {
//中序遍历
//右
if (node->right) {
stk.push(node->right);
}
stk.push(node);
stk.push(NULL);
//左
if (node->left) {
stk.push(node->left);
}
}
else {
TreeNode* node = stk.top();
stk.pop();
//中,节点的逻辑处理
if (preNode != NULL) {
minVal = min(minVal, node->val - preNode->val);
}
preNode = node;
}
}
return minVal;
}